Update from HH
[Flyspeck/.git] / text_formalization / fan / planarity.hl
1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION                                              *)
3 (*                                                                            *)
4 (* Chapter: Fan                                              *)
5 (* Author: Hoang Le Truong                                        *)
6 (* Date: 2010-02-09                                                           *)
7 (* ========================================================================== *)
8
9
10
11 flyspeck_needs "general/sphere.hl";;
12 flyspeck_needs "fan/introduction.hl";;
13 flyspeck_needs "fan/topology.hl";;
14 flyspeck_needs "fan/fan_misc.hl";;
15
16
17 module Planarity  = struct
18
19
20 open Sphere;;
21 open Fan_defs;;
22 open Hypermap;;
23 open Vol1;;
24 open Fan;;
25 open Topology;;         
26 open Fan_misc;;
27
28 (***************************************************************************)
29 (**********************DHVFGBC                      ************************)
30 (***************************************************************************)
31
32
33
34 let collinear_continuous_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 c:real.
35 (\(t:real^1). (&1- drop(t))%u + drop(t) %w - (&1 -c)%x - c% v) continuous_on (:real^1)`,
36   SIMP_TAC[CONTINUOUS_ON_EQ_CONTINUOUS_AT;OPEN_UNIV;DIMINDEX_1]
37 THEN REPEAT STRIP_TAC
38 THEN REWRITE_TAC[drop]
39 THEN MATCH_MP_TAC CONTINUOUS_ADD 
40 THEN STRIP_TAC
41 THENL[
42  MATCH_MP_TAC CONTINUOUS_VMUL 
43 THEN REWRITE_TAC[GSYM REAL_CONTINUOUS_CONTINUOUS1]
44 THEN MATCH_MP_TAC REAL_CONTINUOUS_SUB
45 THEN SIMP_TAC[REAL_CONTINUOUS_CONST;REAL_CONTINUOUS_AT_COMPONENT; DIMINDEX_1; ARITH];
46 REPEAT(MATCH_MP_TAC CONTINUOUS_SUB 
47 THEN SIMP_TAC[CONTINUOUS_CONST])
48 THEN MATCH_MP_TAC CONTINUOUS_VMUL 
49 THEN REWRITE_TAC[GSYM REAL_CONTINUOUS_CONTINUOUS1]
50 THEN SIMP_TAC[REAL_CONTINUOUS_AT_COMPONENT; DIMINDEX_1; ARITH]]);;
51
52
53 let collinear1_continuous_fan=prove(`!u:real^3 w:real^3 t:real^1.
54 (\(t:real^1). (&1- drop(t))%u + drop(t) %w) continuous at t`,
55 REPEAT STRIP_TAC
56 THEN REWRITE_TAC[drop]
57 THEN MATCH_MP_TAC CONTINUOUS_ADD 
58 THEN STRIP_TAC
59 THENL[
60  MATCH_MP_TAC CONTINUOUS_VMUL 
61 THEN REWRITE_TAC[GSYM REAL_CONTINUOUS_CONTINUOUS1]
62 THEN MATCH_MP_TAC REAL_CONTINUOUS_SUB
63 THEN SIMP_TAC[REAL_CONTINUOUS_CONST;REAL_CONTINUOUS_AT_COMPONENT; DIMINDEX_1; ARITH];
64  MATCH_MP_TAC CONTINUOUS_VMUL 
65 THEN REWRITE_TAC[GSYM REAL_CONTINUOUS_CONTINUOUS1]
66 THEN SIMP_TAC[REAL_CONTINUOUS_CONST;REAL_CONTINUOUS_AT_COMPONENT; DIMINDEX_1; ARITH]]);;
67
68
69
70 let CONTINUOUS_CLOSED_PREIMAGE_CONSTANT = prove
71  (`!f:real^M->real^N s a.
72       f continuous_on s /\ closed s ==> closed {x | x IN s /\ f(x) = a}`,
73   REPEAT STRIP_TAC THEN
74   ASM_CASES_TAC `{x | x IN s /\ (f:real^M->real^N)(x) = a} = {}` THEN
75   ASM_REWRITE_TAC[CLOSED_EMPTY] THEN ONCE_REWRITE_TAC[SET_RULE
76    `{x | x IN s /\ f(x) = a} = {x | x IN s /\ f(x) IN {a}}`] THEN
77   MATCH_MP_TAC CONTINUOUS_CLOSED_PREIMAGE THEN
78   ASM_REWRITE_TAC[CLOSED_SING] THEN  SET_TAC[]);;
79
80 let open_collinear_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 c:real.
81 open{t| ~((\(t:real^1). (&1- drop(t))%u + drop(t) %w - (&1 -c)%x - c% v)(t)= vec 0)}`,
82 REPEAT STRIP_TAC
83 THEN REWRITE_TAC[OPEN_CLOSED;DIFF; IN_ELIM_THM;]
84 THEN MP_TAC(ISPECL[`(\(t:real^1). (&1- drop(t))%u + drop(t) %w - (&1 -c)%x - c% v:real^3)`;`(:real^1)`;
85 `((vec 0):real^3)`]CONTINUOUS_CLOSED_PREIMAGE_CONSTANT)
86 THEN SIMP_TAC[CLOSED_UNIV; DIMINDEX_1; collinear_continuous_fan]);;
87
88
89 let open_vector_angle_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 c:real a:real.
90 (!t. ~((&1 - t) % u + t % w = x))
91 ==>
92 open{t|  ~((\(t:real^1). vector_angle (v - x) (((&1 - drop(t)) % u + drop(t) % w) - x))(t) = a)}`,
93 REPEAT STRIP_TAC
94 THEN REWRITE_TAC[OPEN_CLOSED;DIFF; IN_ELIM_THM;]
95 THEN MP_TAC(ISPECL[`lift o (\(t:real^1). vector_angle (v - x:real^3) (((&1 - drop(t)) % u + drop(t) % w) - x))`;`(:real^1)`;
96 `lift (a:real)`]CONTINUOUS_CLOSED_PREIMAGE_CONSTANT)
97 THEN REWRITE_TAC[o_DEF;LIFT_EQ]
98 THEN DISCH_TAC
99 THEN POP_ASSUM MATCH_MP_TAC
100 THEN SIMP_TAC[CLOSED_UNIV; DIMINDEX_1;]
101 THEN REWRITE_TAC[GSYM o_DEF]
102 THEN REWRITE_TAC[GSYM FORALL_LIFT_FUN]
103 THEN MP_TAC(ISPECL[`x:real^3 `;`v:real^3 `;`u:real^3`;` w:real^3`;` &0`]collinear_continuous_fan)
104 THEN REDUCE_ARITH_TAC
105 THEN REDUCE_VECTOR_TAC
106 THEN SIMP_TAC[CONTINUOUS_ON_EQ_CONTINUOUS_AT;OPEN_UNIV;DIMINDEX_1]
107 THEN MATCH_MP_TAC MONO_FORALL
108 THEN GEN_TAC
109 THEN DISCH_THEN (LABEL_TAC"MA")
110 THEN STRIP_TAC
111 THEN REMOVE_THEN "MA" MP_TAC
112 THEN ASM_REWRITE_TAC[]
113 THEN DISCH_TAC
114 THEN MP_TAC(ISPECL[`(\(t:real^1). ((&1- drop(t))%(u:real^3) + drop(t) %(w:real^3)) - (x:real^3) )`;`(\(t:real^3). lift (vector_angle ((v:real^3)-(x:real^3)) t))`;`x':real^1`] CONTINUOUS_AT_COMPOSE)
115 THEN ASM_REWRITE_TAC[GSYM o_ASSOC]
116 THEN REWRITE_TAC[o_DEF]
117 THEN DISCH_TAC
118 THEN POP_ASSUM MATCH_MP_TAC
119 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`;GSYM(o_DEF)]
120 THEN REWRITE_TAC[GSYM(REAL_CONTINUOUS_CONTINUOUS1);GSYM(I_DEF);I_O_ID]
121 THEN MATCH_MP_TAC(ISPECL[`(v:real^3)-(x:real^3)`;`(&1 - drop x') % u + drop x' % w - x:real^3
122 `]REAL_CONTINUOUS_AT_VECTOR_ANGLE)
123 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A+B-C= vec 0<=> A+B=C:real^3`]);;
124
125
126
127
128 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.
129 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
130 ==> 
131 ?t1:real. &0 < t1 /\ t1 <= &1
132 /\ (!t:real. &0<= t /\ t<= t1==> ~(collinear{x,v,(&1-t)%u+ t % w}))`,
133
134 REPEAT STRIP_TAC
135 THEN REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
136 THEN ONCE_REWRITE_TAC[COLLINEAR_3;]
137 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
138 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;
139 `(E:(real^3->bool)->bool)`;` w:real^3`;` u:real^3`]
140 THEN FIND_ASSUM MP_TAC`~collinear {(x:real^3),(u:real^3),(w:real^3)}`
141 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={B,C,A}`;]
142 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[collinear_fan]
143 THEN ASM_REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
144 THEN DISCH_THEN(LABEL_TAC"MA")
145 THEN FIND_ASSUM MP_TAC`~((u:real^3) IN aff {(x:real^3), (v:real^3)})`
146 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
147 THEN DISCH_THEN(LABEL_TAC"A")
148 THEN SUBGOAL_THEN`!(t:real). ~((&1 - t) % u + t % w = x:real^3)`ASSUME_TAC
149 THENL(*1*)[
150 GEN_TAC
151 THEN REMOVE_THEN "MA" MP_TAC
152 THEN MATCH_MP_TAC MONO_NOT
153 THEN DISCH_TAC
154 THEN EXISTS_TAC`&1-(t:real)`
155 THEN EXISTS_TAC`(t:real)`
156 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - t + t = &1`];(*1*)
157
158
159 SUBGOAL_THEN`!(t:real). (collinear {vec 0, v - x, ((&1 - t) % u + t % w) - x} <=>
160       vector_angle (v - x:real^3) (((&1 - t) % u + t % w) - x) = &0 \/
161       vector_angle (v - x) (((&1 - t) % u + t % w) - x) = pi)`ASSUME_TAC
162 THENL(*2*)[
163
164 GEN_TAC
165 THEN MP_TAC(ISPECL[`(v:real^3)-(x:real^3)`;`((&1 - t) % (u:real^3) + (t:real) % (w:real^3)) - (x:real^3)`]
166 COLLINEAR_VECTOR_ANGLE)
167 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B=vec 0<=> A=B`];(*2*)
168
169 ASM_REWRITE_TAC[]
170 THEN MRESA_TAC open_vector_angle_fan[ `x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`c:real`;`&0`]
171 THEN MRESA_TAC open_vector_angle_fan[ `x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`c:real`;`pi`]
172 THEN REWRITE_TAC[DE_MORGAN_THM;]
173 THEN MP_TAC(ISPECL[`{(t:real^1) | ~(   
174 vector_angle ((v:real^3) - x) (((&1 - drop(t)) % (u:real^3) + drop(t) % (w:real^3)) - x) = &0)}`
175 ;`{(t:real^1) | ~(vector_angle (v - x) (((&1 - drop (t)) % u + drop (t) % w) - (x:real^3)) = pi)}`]OPEN_INTER)
176 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM]
177 THEN DISCH_TAC
178 THEN SUBGOAL_THEN` 
179 ((vec 0):real^1) IN {(t:real^1) | ~(   
180 vector_angle ((v:real^3) - x) (((&1 - drop(t)) % (u:real^3) + drop(t) % (w:real^3)) - x) = &0 )/\ 
181 ~(vector_angle (v - x) (((&1 - drop (t)) % u + drop (t) % w) - (x:real^3)) = pi)}` ASSUME_TAC
182 THENL(*3*)[
183
184 SIMP_TAC[IN_ELIM_THM;drop;VEC_COMPONENT;GSYM(DE_MORGAN_THM)]
185 THEN REDUCE_ARITH_TAC
186 THEN REDUCE_VECTOR_TAC
187 THEN MP_TAC(ISPECL[`((v:real^3)-(x:real^3))`;`((u:real^3)-(x:real^3))`]COLLINEAR_VECTOR_ANGLE)
188 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B=vec 0<=> A=B:real^3`]
189 THEN ONCE_REWRITE_TAC[GSYM(COLLINEAR_3);]
190 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
191 THEN ASM_REWRITE_TAC[];(*3*)
192
193
194 POP_ASSUM MP_TAC
195 THEN POP_ASSUM MP_TAC
196 THEN DISCH_THEN(LABEL_TAC"G")
197 THEN DISCH_TAC
198 THEN REMOVE_THEN "G" MP_TAC
199 THEN REWRITE_TAC[open_def]
200 THEN DISCH_TAC
201 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`(vec 0):real^1`th))
202 THEN ASM_REWRITE_TAC[IN_ELIM_THM;dist; VECTOR_ARITH`A-vec 0=A`]
203 THEN STRIP_TAC
204 THEN EXISTS_TAC`min ((e:real)/ &2) (&1)`
205 THEN STRIP_TAC
206 THENL(*4*)[
207 POP_ASSUM (fun th->REWRITE_TAC[])
208 THEN POP_ASSUM MP_TAC
209 THEN REAL_ARITH_TAC;(*4*)
210
211 STRIP_TAC
212 THENL(*5*)[
213 REAL_ARITH_TAC;
214 GEN_TAC
215 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`lift(t:real)`th))
216 THEN REWRITE_TAC[LIFT_DROP;NORM_LIFT]
217 THEN DISCH_THEN(LABEL_TAC"G")
218 THEN STRIP_TAC
219 THEN REMOVE_THEN "G" MATCH_MP_TAC
220 THEN POP_ASSUM MP_TAC
221 THEN POP_ASSUM MP_TAC
222 THEN POP_ASSUM MP_TAC
223 THEN REAL_ARITH_TAC]]]]]);;
224
225
226
227
228
229 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).
230
231 FAN(x,V,E) /\ {v,w} INTER {v1,w1}={} /\ {v1,w1} IN E /\ {v,w} IN E
232 ==>
233 ?h:real.
234 (&0 < h)
235 /\ 
236 (!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)
237 ==> h  <= dist(y1,y2) ))`,
238
239 REPEAT STRIP_TAC 
240 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
241 ` (v:real^3)`] 
242 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
243 ` (v1:real^3)`]
244 THEN MATCH_MP_TAC( ISPECL [`aff_ge {(x:real^3)} {(v:real^3), (w:real^3)} INTER ballnorm_fan x`; 
245  `aff_ge {(x:real^3)} {(v1:real^3), (w1:real^3)} INTER ballnorm_fan x`] SEPARATE_CLOSED_COMPACT)
246 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v:real^3)`;` (w:real^3)`]closed_aff_ge_ballnorm_fan) 
247 THEN RESA_TAC
248 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v1:real^3)`;` (w1:real^3)`]compact_aff_ge_ballnorm_fan) THEN RESA_TAC
249 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
250 THEN REWRITE_TAC[FAN;fan7] 
251 THEN STRIP_TAC
252 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(v:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
253                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
254 THEN ASM_REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL; SET_RULE`(A INTER C) INTER (B INTER C)= (A INTER B) INTER C`;] 
255 THEN ASSUME_TAC(AFFINE_SING) 
256 THEN MP_TAC(ISPEC`{ (x:real^3) }` AFFINE_HULL_EQ )
257 THEN RESA_TAC 
258 THEN RESA_TAC 
259 THEN REWRITE_TAC[ballnorm_fan;INTER; IN_SING; EXTENSION;EMPTY;IN_ELIM_THM;] 
260 THEN GEN_TAC
261 THEN STRIP_TAC 
262 THEN POP_ASSUM MP_TAC 
263 THEN ASM_REWRITE_TAC[DIST_REFL ] 
264 THEN REAL_ARITH_TAC);;
265
266 let AFF_GT_1_2=prove(`!x v w.
267          DISJOINT {x} {v, w}
268          ==> aff_gt {x} {v, w} =
269              {y | ?t1 t2 t3.
270                       &0 < t2 /\
271                       &0 < t3 /\
272                       t1 + t2 + t3 = &1 /\
273                       y = t1 % x + t2 % v + t3 % w}`,
274 AFF_TAC);;
275
276
277
278
279 let linear_aff_fan=prove(`!x:real^3 v:real^3 u:real^3.
280 linear (\(t:real^2). t$1 %(v-x)+t$2 %(u-x))`,
281 REPEAT STRIP_TAC
282 THEN MATCH_MP_TAC LINEAR_COMPOSE_ADD 
283 THEN STRIP_TAC
284 THEN MATCH_MP_TAC LINEAR_VMUL_COMPONENT
285 THEN SIMP_TAC[LINEAR_ID; DIMINDEX_2; ARITH]);;
286
287 let linear1_aff_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
288 linear (\(t:real^3). t$1 %(v-x)+t$2 %(u-x)+t$3 %(w-u))`,
289 REPEAT STRIP_TAC
290 THEN REPEAT(MATCH_MP_TAC LINEAR_COMPOSE_ADD THEN STRIP_TAC)
291 THEN MATCH_MP_TAC LINEAR_VMUL_COMPONENT
292 THEN SIMP_TAC[LINEAR_ID; DIMINDEX_3; ARITH]);;
293
294
295
296
297
298 let linear_inj_fan=prove(`!x:real^3 v:real^3 u:real^3.
299 ~collinear{x,v,u}
300 ==>(!(a:real^2) (b:real^2). (\(t:real^2). t$1 %(v-x)+t$2 %(u-x))(a)=(\(t:real^2). t$1 %(v-x)+t$2 %(u-x))(b) ==>a=b)`,
301
302 REPEAT GEN_TAC
303 THEN DISCH_TAC
304 THEN ASSUME_TAC(ISPECL[`x:real^3`;` v:real^3`;`u:real^3`]linear_aff_fan)
305 THEN MP_TAC(ISPEC`(\(t:real^2). t$1 %(v-x)+t$2 %(u-x):real^3)`LINEAR_INJECTIVE_0)
306 THEN RESP_TAC
307 THEN REMOVE_ASSUM_TAC
308 THEN GEN_TAC
309 THEN DISJ_CASES_TAC(REAL_ARITH`(a:real^2)$2= &0 \/ ~(a$2= &0)`)
310 THENL[
311 ASM_REWRITE_TAC[]
312 THEN REDUCE_VECTOR_TAC
313 THEN REWRITE_TAC[VECTOR_MUL_EQ_0;VECTOR_ARITH`A-B=vec 0<=> B=A`]
314 THEN MP_TAC(ISPECL[`x:real^3`;` v:real^3`;`u:real^3`]th3)
315 THEN RESA_TAC
316 THEN ASM_TAC
317 THEN SIMP_TAC[ LAMBDA_BETA;CART_EQ; DIMINDEX_2; FORALL_2; VEC_COMPONENT; ARITH];
318
319 REWRITE_TAC[VECTOR_ARITH`A+B=vec 0<=>B= --A`]
320 THEN STRIP_TAC
321 THEN MP_TAC(SET_RULE`a$2 % (u - x) = --((a:real^2)$1 % (v - x:real^3)) ==> (inv (a$2)) % a$2 % (u - x) = (inv (a$2)) % (--(a$1 % (v - x)))`)
322 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
323 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
324 THEN MP_TAC(ISPEC`(a:real^2)$2`REAL_MUL_LINV)
325 THEN RESA_TAC
326 THEN REDUCE_VECTOR_TAC
327 THEN REWRITE_TAC[VECTOR_ARITH`A-B=C%(--(D%(U-B)))<=> A= (&1+C*D)%B+(--C*D)%U:real^3`]
328 THEN MP_TAC(ISPECL[`x:real^3`;` v:real^3`;`u:real^3`]th3)
329 THEN RESA_TAC
330 THEN POP_ASSUM MP_TAC
331 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
332 THEN DISCH_THEN(LABEL_TAC"A")
333 THEN DISCH_TAC
334 THEN SUBGOAL_THEN `F`ASSUME_TAC
335 THENL[
336 REMOVE_THEN "A" MP_TAC
337 THEN ASM_REWRITE_TAC[]
338 THEN EXISTS_TAC`(&1 + inv ((a:real^2)$2) * a$1)`
339 THEN EXISTS_TAC`(--inv ((a:real^2)$2) * a$1)`
340 THEN ASM_REWRITE_TAC[]
341 THEN REAL_ARITH_TAC;
342 ASM_MESON_TAC[]]]);;
343
344
345
346
347
348 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).
349 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w})
350 ==>
351 ~(x IN convex hull{v,u,w})`,
352 REPEAT STRIP_TAC
353 THEN POP_ASSUM MP_TAC
354 THEN POP_ASSUM MP_TAC
355 THEN ASM_REWRITE_TAC[]
356 THEN MATCH_MP_TAC MONO_NOT
357 THEN REWRITE_TAC[CONVEX_HULL_3; IN_ELIM_THM; coplanar]
358 THEN STRIP_TAC
359 THEN EXISTS_TAC`v:real^3`
360 THEN EXISTS_TAC`u:real^3`
361 THEN EXISTS_TAC`w:real^3`
362 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
363 THENL(*3*)[
364 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
365 THEN EXISTS_TAC`u':real`
366 THEN EXISTS_TAC`v':real`
367 THEN EXISTS_TAC`w':real`
368 THEN ASM_MESON_TAC[];
369
370 SUBGOAL_THEN`(v:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
371 THENL(*4*)[
372 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
373 THEN EXISTS_TAC`&1`
374 THEN EXISTS_TAC`&0`
375 THEN EXISTS_TAC`&0`
376 THEN REDUCE_ARITH_TAC
377 THEN VECTOR_ARITH_TAC;
378
379 SUBGOAL_THEN`(u:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
380 THENL(*5*)[
381 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
382 THEN EXISTS_TAC`&0`
383 THEN EXISTS_TAC`&1`
384 THEN EXISTS_TAC`&0`
385 THEN REDUCE_ARITH_TAC
386 THEN VECTOR_ARITH_TAC;
387 SUBGOAL_THEN`(w:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
388 THENL(*6*)[
389 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
390 THEN EXISTS_TAC`&0`
391 THEN EXISTS_TAC`&0`
392 THEN EXISTS_TAC`&1`
393 THEN REDUCE_ARITH_TAC
394 THEN VECTOR_ARITH_TAC;
395 ASM_TAC
396 THEN SET_TAC[]]]]]);;
397
398
399
400 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).
401 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w})
402 ==>
403 ?(h:real). &0< h /\ (!(y:real^3).  y IN convex hull{v,u,w} ==> h < norm(y-x))`,
404
405 REPEAT STRIP_TAC 
406 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3),(w:real^3)}` ASSUME_TAC
407 THENL(*1*)[
408 MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
409 ` (v:real^3)`] remark1_fan)
410 THEN RESA_TAC 
411 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
412 `(u:real^3)`] remark1_fan)
413 THEN RESA_TAC 
414 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
415 ` (w:real^3)`] remark1_fan)
416 THEN RESA_TAC 
417 THEN POP_ASSUM MP_TAC
418 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
419 THEN ASM_REWRITE_TAC[]
420 THEN STRIP_TAC
421 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`)
422 THEN ASM_REWRITE_TAC[]
423 THEN DISCH_TAC
424 THEN MATCH_MP_TAC(ISPECL[`{(v:real^3),(u:real^3),(w:real^3)}`;`V:real^3->bool`]FINITE_SUBSET)
425 THEN ASM_REWRITE_TAC[]
426 THEN ASM_TAC
427 THEN REWRITE_TAC[FAN;fan1]
428 THEN SET_TAC[];
429
430 MP_TAC(ISPEC`{(v:real^3),(u:real^3),(w:real^3)}`FINITE_IMP_COMPACT_CONVEX_HULL)
431 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;COMPACT_EQ_BOUNDED_CLOSED])
432 THEN DISCH_TAC
433 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)
434 THEN RESA_TAC
435 THEN MP_TAC(ISPECL[`convex hull {(v:real^3),(u:real^3),(w:real^3)}`;`x:real^3`]SEPARATE_POINT_CLOSED)
436 THEN RESA_TAC
437 THEN EXISTS_TAC`d:real/ &2`
438 THEN STRIP_TAC
439 THENL[
440 ASM_TAC THEN REAL_ARITH_TAC;
441
442 ONCE_REWRITE_TAC[NORM_SUB]
443 THEN GEN_TAC
444 THEN POP_ASSUM (fun th ->MP_TAC(ISPEC`y:real^3`th))
445 THEN REWRITE_TAC[dist;]
446 THEN DISCH_THEN(LABEL_TAC"A")
447 THEN DISCH_TAC 
448 THEN REMOVE_THEN "A" MP_TAC
449 THEN POP_ASSUM (fun th ->REWRITE_TAC[th])
450 THEN POP_ASSUM MP_TAC
451 THEN REAL_ARITH_TAC]]);;
452
453
454
455
456 let expansion_convex_fan=prove(`!(v:real^3) (u:real^3) (w:real^3) (t:real) s:real.
457 &0 <= t /\ t<= &1
458 /\ &0 <=s /\ s <= &1 
459 ==> (&1-s)%v+s%((&1-t)%u+ t%w) IN convex hull{v,u,w}`,
460
461 REWRITE_TAC[REAL_ARITH`A<= &1 <=> &0<= &1 -A`]
462 THEN REPEAT STRIP_TAC
463 THEN REWRITE_TAC[CONVEX_HULL_3; IN_ELIM_THM;]
464 THEN EXISTS_TAC`&1 - (s:real)`
465 THEN EXISTS_TAC`(s:real)*(&1 - (t:real))`
466 THEN EXISTS_TAC`(s:real)*(t:real)`
467 THEN ASM_REWRITE_TAC[VECTOR_ARITH`s%((&1-t)%u+ t%w)= (s*(&1-t))%u+ (s*t)%w:real^3`]
468 THEN STRIP_TAC
469 THENL[MATCH_MP_TAC REAL_LE_MUL
470 THEN ASM_TAC
471 THEN REAL_ARITH_TAC;
472 STRIP_TAC
473 THENL[MATCH_MP_TAC REAL_LE_MUL
474 THEN ASM_TAC
475 THEN REAL_ARITH_TAC;
476 REAL_ARITH_TAC]]);;
477
478
479 let expansion1_convex_fan=prove(`!(v:real^3) (u:real^3) s:real.
480 &0 <=s /\ s <= &1 
481 ==> (&1-s)%v+s%u IN convex hull{v,u}`,
482 REPEAT STRIP_TAC
483 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3)`;` (u:real^3)`;` &0`;`s:real`]expansion_convex_fan)
484 THEN ASM_REWRITE_TAC[SET_RULE`{A,B,B}={A,B}`]
485 THEN REDUCE_ARITH_TAC
486 THEN REDUCE_VECTOR_TAC
487 THEN DISCH_TAC
488 THEN POP_ASSUM MATCH_MP_TAC
489 THEN REAL_ARITH_TAC);;
490
491 let norm_origin_fan=prove(`!x:real^3.
492  (\(y:real^3). lift(norm(y-x))) continuous_on (:real^3) `,
493 GEN_TAC
494 THEN MP_TAC(ISPECL[`(\(y:real^3). y-(x:real^3))`;`(\(y:real^3). lift(norm(y)))`;`(:real^3)`]CONTINUOUS_ON_COMPOSE)
495 THEN REWRITE_TAC[o_DEF]
496 THEN DISCH_TAC
497 THEN POP_ASSUM MATCH_MP_TAC
498 THEN REWRITE_TAC[CONTINUOUS_ON_LIFT_NORM;GSYM(o_DEF)]
499 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB 
500 THEN SIMP_TAC[CONTINUOUS_ON_CONST;CONTINUOUS_ON_ID]);;
501
502
503
504 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).
505 FAN(x,V,E) /\ {v,u} IN E
506 ==>
507 ~(x IN convex hull{v,u})`,
508 REPEAT STRIP_TAC
509 THEN POP_ASSUM MP_TAC
510 THEN ASM_REWRITE_TAC[]
511 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
512 ` (v:real^3)`] remark1_fan)
513 THEN RESA_TAC
514 THEN FIND_ASSUM MP_TAC`~(u IN aff {x,v:real^3})`
515 THEN MATCH_MP_TAC MONO_NOT
516 THEN REWRITE_TAC[CONVEX_HULL_2; IN_ELIM_THM;]
517 THEN STRIP_TAC
518 THEN POP_ASSUM MP_TAC
519 THEN POP_ASSUM MP_TAC
520 THEN DISJ_CASES_TAC(REAL_ARITH`(v':real= &0) \/ ~(v':real= &0)`)
521 THENL[ASM_REWRITE_TAC[]
522 THEN REDUCE_ARITH_TAC
523 THEN DISCH_TAC
524 THEN ASM_REWRITE_TAC[]
525 THEN REDUCE_VECTOR_TAC
526 THEN ASM_MESON_TAC[];
527
528 POP_ASSUM MP_TAC
529 THEN REPEAT REMOVE_ASSUM_TAC
530 THEN REWRITE_TAC[VECTOR_ARITH`A=B+C<=>C= A-B:real^3`;REAL_ARITH`a+b= &1<=> a= &1 -b:real`]
531 THEN REPEAT DISCH_TAC
532 THEN MP_TAC(SET_RULE`v'% u =x- u' % v ==> (inv (v')) % v' % u = (inv (v')) % (x-u' % v:real^3)`)
533 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
534 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)`])
535 THEN MP_TAC(ISPEC`(v':real)`REAL_MUL_LINV)
536 THEN RESA_TAC
537 THEN REDUCE_VECTOR_TAC
538 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
539 THEN STRIP_TAC
540 THEN EXISTS_TAC`inv(v':real)`
541 THEN EXISTS_TAC`&1-inv(v':real)`
542 THEN ASM_REWRITE_TAC[]
543 THEN REAL_ARITH_TAC]);;
544
545
546
547
548
549
550 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.
551 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
552 ==>
553 ?(h:real). &0 <h /\  h<= &1
554 /\ (!t:real. &0 <= t /\  t<h
555 ==> (!(s:real). &0 <= s /\ s <= &1 
556 ==> s * inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))* norm(u-((&1-t)%u+ t%w))< d  ))`,
557 REPEAT STRIP_TAC
558 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
559 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)
560 THEN RESA_TAC
561 THEN POP_ASSUM MP_TAC
562 THEN DISCH_THEN (LABEL_TAC"A")
563 THEN EXISTS_TAC`min ((h:real)*(d:real) *inv(norm(u-w:real^3))) (&1)`
564 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
565 ` (u:real^3)`] remark1_fan)
566 THEN RESA_TAC 
567 THEN  MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_gl_zero_fan)
568 THEN RESA_TAC 
569 THEN MP_TAC(ISPECL[`(h:real)*(d:real)`;`inv(norm(u-w:real^3))`] REAL_LT_MUL)
570 THEN RESA_TAC
571 THEN STRIP_TAC
572 THENL[
573 MP_TAC(ISPECL[`h:real`;`d:real`] REAL_LT_MUL)
574 THEN RESA_TAC
575 THEN ASM_TAC
576 THEN REAL_ARITH_TAC;
577 STRIP_TAC
578 THENL[
579
580 REAL_ARITH_TAC;
581 REPEAT STRIP_TAC
582 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
583 THEN RESA_TAC
584 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
585 THEN RESA_TAC
586 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)))`)
587 THEN ASM_REWRITE_TAC[REAL_ARITH`min (h * d * inv (norm (u - w))) (&1)<= &1`]
588 THEN STRIP_TAC
589 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
590 THEN RESA_TAC
591 THEN REMOVE_THEN "A"(fun th -> MP_TAC(ISPEC`(&1-s)%v+s%((&1-t)%u+ t%w):real^3`th))
592 THEN RESA_TAC
593 THEN MP_TAC(ISPECL[`h:real`;`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`]REAL_LT_INV2)
594 THEN RESA_TAC
595 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)`)
596 THEN RESA_TAC
597 THEN MP_TAC(ISPEC`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`REAL_LE_INV)
598 THEN RESA_TAC
599 THEN MP_TAC(ISPEC`t:real`REAL_ABS_REFL)
600 THEN RESP_TAC
601 THEN MP_TAC(ISPECL[`inv(norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;
602 `inv(h:real)`;`t:real`;`(h * d * inv (norm (u - w:real^3)))`;
603 ]REAL_LT_MUL2)
604 THEN RESA_TAC
605 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
606 THEN RESA_TAC
607 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
608 THEN RESA_TAC
609 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
610 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
611 THEN RESA_TAC
612 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)
613 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B*C*D)*E=(A*B)*C*(D*E)`]
614 THEN REDUCE_ARITH_TAC
615 THEN STRIP_TAC
616 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;`(t:real)`;] REAL_LE_MUL)
617 THEN RESA_TAC
618 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)
619 THEN RESA_TAC
620 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1) \/ ~((s:real)= &1)`)
621 THENL[
622 POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
623 THEN REDUCE_ARITH_TAC
624 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`];
625 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
626 THEN RESA_TAC
627 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)`;
628 `d:real`]REAL_LT_MUL2)
629 THEN REDUCE_ARITH_TAC
630 THEN RESA_TAC
631 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`]]]]);;
632
633
634
635
636 let bounded_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3).
637 FAN(x,V,E) /\ {v,u} IN E
638 ==> ?(h:real). &0< h /\ (!(y:real^3).  y IN convex hull{v,u} ==> norm(y-x)<h )`,
639 REPEAT STRIP_TAC
640 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3)}` ASSUME_TAC
641 THENL(*1*)[SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
642                  IN_INSERT; NOT_IN_EMPTY];
643
644 MP_TAC(ISPEC`{(v:real^3),(u:real^3)}`FINITE_IMP_COMPACT_CONVEX_HULL)
645 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;])
646 THEN DISCH_TAC
647 THEN ASSUME_TAC(ISPEC`x:real^3` norm_origin_fan )
648 THEN ASSUME_TAC(SET_RULE`convex hull {(v:real^3), u} SUBSET (:real^3)`)
649 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)
650 THEN RESA_TAC
651 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`convex hull {(v:real^3),(u:real^3)}`]COMPACT_CONTINUOUS_IMAGE)
652 THEN RESA_TAC
653 THEN POP_ASSUM MP_TAC
654 THEN REWRITE_TAC[COMPACT_EQ_BOUNDED_CLOSED;bounded;IMAGE;IN_ELIM_THM]
655 THEN ONCE_REWRITE_TAC[TAUT`A/\B<=>B/\A`;]
656 THEN STRIP_TAC
657 THEN POP_ASSUM MP_TAC
658 THEN DISCH_THEN(LABEL_TAC"A")
659 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u} /\
660         lift (norm (v - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
661 THENL[
662 EXISTS_TAC`v:real^3`
663 THEN SIMP_TAC[CONVEX_HULL_2; IN_ELIM_THM;]
664 THEN EXISTS_TAC`&1`
665 THEN EXISTS_TAC`&0`
666 THEN REDUCE_VECTOR_TAC
667 THEN REAL_ARITH_TAC;
668
669 SUBGOAL_THEN `&0< (a:real)` ASSUME_TAC
670 THENL[
671 REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`lift (norm (v - (x:real^3)))`th))
672 THEN RESA_TAC
673 THEN POP_ASSUM MP_TAC
674 THEN REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
675 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
676 ` (v:real^3)`] remark1_fan)
677 THEN RESA_TAC 
678 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
679 THEN RESA_TAC
680 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
681 THEN MP_TAC(REAL_ARITH`~(&0 =norm(v-x:real^3)) /\ &0 <= norm(v-x:real^3)==> &0 <norm(v-x:real^3)`)
682 THEN RESA_TAC
683 THEN POP_ASSUM MP_TAC
684 THEN REAL_ARITH_TAC;
685
686 EXISTS_TAC`&2 * a:real`
687 THEN STRIP_TAC
688 THENL[
689
690 REPEAT STRIP_TAC
691 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u} /\
692         lift (norm (y - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
693 THENL[
694 EXISTS_TAC`y:real^3`
695 THEN ASM_SIMP_TAC[];
696
697 REMOVE_THEN "A"(fun th-> MP_TAC(ISPEC`lift (norm (y - x:real^3))`th)) 
698 THEN ASM_REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
699 THEN ASM_TAC
700 THEN REAL_ARITH_TAC];
701
702 ASM_TAC
703 THEN REAL_ARITH_TAC]]]]);;
704
705
706
707 let REAL_ABS_SUB_NORM = prove
708  (`!x y. abs(norm(x) - norm(y)) <= norm(x - y)`,
709   REWRITE_TAC[REAL_ARITH `abs(x - y) <= a <=> x <= y + a /\ y <= x + a`] THEN
710   MESON_TAC[NORM_TRIANGLE_SUB; NORM_SUB]);;
711
712
713
714 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.
715 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
716 ==>
717 ?(h:real). &0 <h /\  h<= &1
718 /\ (!t:real. &0 <= t /\  t<h
719 ==> (!(s:real). &0 <= s /\ s <= &1 
720 ==> (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  ))`,
721
722 REWRITE_TAC[VECTOR_ARITH`A%B-C%B=(A-C)%B`;NORM_MUL]
723 THEN REPEAT STRIP_TAC
724 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
725 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)
726 THEN RESA_TAC
727 THEN POP_ASSUM MP_TAC
728 THEN DISCH_THEN(LABEL_TAC"A")
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 POP_ASSUM MP_TAC
732 THEN DISCH_THEN(LABEL_TAC"B")
733 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)
734 THEN RESA_TAC
735 THEN POP_ASSUM MP_TAC
736 THEN DISCH_THEN(LABEL_TAC"C")
737 THEN EXISTS_TAC`min (h*h*(inv (h'))* inv(norm(u-w:real^3))*d:real) (&1)`
738 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
739 ` (u:real^3)`] remark1_fan)
740 THEN RESA_TAC 
741 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
742 THEN RESA_TAC
743 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
744 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
745 THEN RESA_TAC
746 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
747 THEN RESA_TAC
748 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
749 THEN RESA_TAC
750 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
751 THEN RESA_TAC
752 THEN MP_TAC(REAL_ARITH`&0 <(h':real)==> ~(h'= &0)`)
753 THEN RESA_TAC
754 THEN MP_TAC(ISPEC`(h':real)`REAL_MUL_LINV)
755 THEN RESA_TAC
756 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LE_INV)
757 THEN RESA_TAC
758 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LT_INV)
759 THEN RESA_TAC
760 THEN MP_TAC(ISPEC`(h:real)`REAL_LT_INV)
761 THEN RESA_TAC
762 THEN MP_TAC(REAL_ARITH`&0 <inv (h:real)==> &0 <= inv(h)`)
763 THEN RESA_TAC
764 THEN MP_TAC(ISPEC`(h':real)`REAL_LT_INV)
765 THEN RESA_TAC
766 THEN MP_TAC(REAL_ARITH`&0 <inv (h':real)==> &0 <= inv(h')`)
767 THEN RESA_TAC
768 THEN STRIP_TAC
769 THENL(*1*)[
770 MP_TAC(ISPECL[`(h:real)`;`inv (h':real) `]REAL_LT_MUL)
771 THEN RESA_TAC
772 THEN MP_TAC(ISPECL[`(h:real)`;`(h:real)*inv (h':real) `]REAL_LT_MUL)
773 THEN RESA_TAC
774 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real)`;`inv(norm(u-w:real^3))`]REAL_LT_MUL)
775 THEN RESA_TAC
776 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real) *inv(norm(u-w:real^3))`;`d:real`]REAL_LT_MUL)
777 THEN RESA_TAC
778 THEN POP_ASSUM MP_TAC
779 THEN POP_ASSUM MP_TAC
780 THEN REAL_ARITH_TAC;(*1*)
781
782
783 STRIP_TAC
784 THENL(*2*)[
785
786 REAL_ARITH_TAC;(*2*)
787
788 REPEAT STRIP_TAC
789 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3)`;` s:real`]expansion1_convex_fan)
790 THEN RESA_TAC
791 THEN REMOVE_THEN "C"(fun th->MP_TAC(ISPEC`(&1 - s) % v + s % u:real^3`th))
792 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
793 THEN RESA_TAC
794 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`]
795 origin_point_not1_in_convex_fan)
796 THEN RESA_TAC
797 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%u:real^3)` ASSUME_TAC
798 THENL(*3*)[
799 POP_ASSUM MP_TAC
800 THEN MATCH_MP_TAC MONO_NOT
801 THEN RESA_TAC;(*3*)
802
803 MP_TAC(ISPECL[`(&1-s)%v+s%u:real^3`;`x:real^3`]imp_norm_not_zero_fan)
804 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
805 THEN RESA_TAC
806 THEN ASSUME_TAC(ISPEC`(&1-s)%v+s%u-x:real^3`NORM_POS_LE)
807 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)`)
808 THEN RESA_TAC
809 THEN MP_TAC(ISPEC`(norm((&1-s)%v+s%u-x:real^3))`REAL_MUL_LINV)
810 THEN RESA_TAC
811 THEN MP_TAC(ISPEC`(norm((&1-s)%v+s%u-x:real^3))`REAL_LE_INV)
812 THEN RESA_TAC
813 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) `)
814 THEN ASM_REWRITE_TAC[REAL_ARITH`min (h * h * inv h' * inv (norm (u - w:real^3)) * d) (&1)<= &1`]
815 THEN STRIP_TAC
816 THEN MP_TAC(ISPECL[`norm ((&1 - s) % v + s % u - x:real^3) `;
817 `(h':real)`;`t:real`;`(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
818 THEN RESA_TAC
819 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(&0:real) `;`s:real`]expansion_convex_fan)
820 THEN REDUCE_ARITH_TAC
821 THEN REDUCE_VECTOR_TAC
822 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0/\ &0<= &1`]
823 THEN DISCH_TAC
824 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`((&1 - s) % v + s % u:real^3)`th))
825 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
826 THEN DISCH_TAC
827 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % u-x:real^3)`]REAL_LT_INV2)
828 THEN RESA_TAC
829 THEN MP_TAC(ISPECL[`norm((&1-s)%v+s%u-x:real^3)`;`t:real`]REAL_LE_MUL)
830 THEN RESA_TAC
831 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)
832 THEN RESA_TAC
833 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
834 THEN ASM_REWRITE_TAC[]
835 THEN DISCH_TAC
836 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`th))
837 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
838 THEN DISCH_TAC
839 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_LT_INV2)
840 THEN RESA_TAC
841 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)
842 THEN RESA_TAC
843 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
844 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
845 THEN RESA_TAC
846 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)
847 THEN RESA_TAC
848 THEN MP_TAC(ISPECL[`norm (u - w:real^3)`;
849 `inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)) *
850       inv (norm ((&1 - s) % v + s % u - x)) *
851       norm ((&1 - s) % v + s % u - x) *
852       t`;`inv h * inv h * h' * h * h * inv h' * inv (norm (u - w:real^3)) * d`;]REAL_LT_LMUL)
853 THEN RESA_TAC
854 THEN POP_ASSUM MP_TAC
855 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(B*C)*E*A*D`]
856 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
857 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
858 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D=(A*B)*C*D`]
859 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*(C*D)*E`]
860 THEN ONCE_REWRITE_TAC[REAL_ARITH`(A*B*C)*D*E=A*B*(C*D)*E`]
861 THEN ASM_REWRITE_TAC[]
862 THEN REDUCE_ARITH_TAC
863 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C)*D=A*B*(C*D)`]
864 THEN REDUCE_ARITH_TAC
865 THEN ASM_REWRITE_TAC[REAL_ARITH`((A*B)*C*D)*E=(A*C)*(B*D)*E`]
866 THEN REDUCE_ARITH_TAC
867 THEN REWRITE_TAC[REAL_ARITH`((A*B)*C)*D*E=(A*B)*(C*D)*E`]
868 THEN ASSUME_TAC(ISPECL[`u:real^3`;`w:real^3`]NORM_SUB)
869 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
870 THEN MP_TAC(ISPECL[`t:real`;`w-u:real^3`]NORM_MUL)
871 THEN MP_TAC(ISPEC`t:real`REAL_ABS_REFL)
872 THEN RESP_TAC
873 THEN DISCH_TAC
874 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
875 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B)*C*D=C*A*(B*D)`]
876 THEN REDUCE_ARITH_TAC
877 THEN DISCH_THEN(LABEL_TAC"BA")
878 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
879 THEN RESA_TAC
880 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3)` ASSUME_TAC
881 THENL(*4*)[
882 POP_ASSUM MP_TAC
883 THEN DISCH_THEN (LABEL_TAC"MA")
884 THEN STRIP_TAC
885 THEN REMOVE_THEN"MA" MP_TAC
886 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
887 THEN ASM_REWRITE_TAC[];(*4*)
888
889 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
890 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
891 THEN RESA_TAC
892 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)
893 THEN RESP_TAC
894 THEN ASM_REWRITE_TAC[REAL_ABS_ABS;REAL_ABS_DIV;REAL_ABS_MUL;REAL_ABS_NORM;real_div;REAL_INV_MUL;
895 REAL_ARITH`(A*B*C)*D=A*C*(B*D)`]
896 THEN REDUCE_ARITH_TAC
897 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)
898 THEN REWRITE_TAC[VECTOR_ARITH`
899 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)-((&1 - s) % v + s % u - x)=s%(t)%(w-u) :real^3`]
900 THEN ONCE_REWRITE_TAC[NORM_MUL]
901 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
902 THEN RESP_TAC
903 THEN DISCH_TAC
904 THEN MP_TAC(ISPECL[`abs
905  (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3) -
906   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)
907 THEN RESA_TAC
908 THEN REMOVE_THEN "BA" MP_TAC
909 THEN POP_ASSUM MP_TAC
910 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1)\/ ~((s:real) = &1)`)
911 THENL(*5*)[
912 ASM_REWRITE_TAC[]
913 THEN REAL_ARITH_TAC;(*5*)
914
915 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
916 THEN RESA_TAC
917 THEN ASSUME_TAC(ISPEC`(t % (w - u):real^3)`NORM_POS_LE)
918 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)
919 THEN RESA_TAC
920 THEN REPEAT STRIP_TAC
921 THEN MP_TAC(ISPECL[`s:real`;`&1`;`norm (t % (w - u)) *
922      inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`;
923 `d:real`]REAL_LT_MUL2)
924 THEN REDUCE_ARITH_TAC
925 THEN ASM_REWRITE_TAC[]
926 THEN POP_ASSUM MP_TAC
927 THEN POP_ASSUM MP_TAC
928 THEN POP_ASSUM MP_TAC
929 THEN REAL_ARITH_TAC]]]]]);;
930
931
932
933
934
935 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.
936 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
937 ==>
938 ?(h:real). &0 <h /\  h<= &1
939 /\ (!t:real. &0 <= t /\  t<h
940 ==> (!(s:real). &0 <= s /\ s <= &1 
941 ==> 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  ))`,
942
943 REPEAT STRIP_TAC
944 THEN MP_TAC(REAL_ARITH`&0< (d:real)==> &0< d/ &2`)
945 THEN RESA_TAC
946 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)
947 THEN RESA_TAC
948 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)
949 THEN RESA_TAC
950 THEN POP_ASSUM MP_TAC
951 THEN DISCH_THEN (LABEL_TAC"A")
952 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)
953 THEN RESA_TAC
954 THEN POP_ASSUM MP_TAC
955 THEN DISCH_THEN (LABEL_TAC"B")
956 THEN EXISTS_TAC`min (h:real) (h':real)`
957 THEN STRIP_TAC
958 THENL[ASM_TAC
959 THEN REAL_ARITH_TAC;
960
961 STRIP_TAC
962 THENL[
963 ASM_TAC
964 THEN REAL_ARITH_TAC;
965
966 REPEAT STRIP_TAC
967 THEN MP_TAC(REAL_ARITH`t<  min (h:real) (h':real)==> t< (h:real) /\ t< (h':real)`)
968 THEN RESA_TAC
969 THEN REMOVE_THEN"B" (fun th-> MP_TAC(ISPEC`t:real`th))
970 THEN RESA_TAC
971 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
972 THEN RESA_TAC
973 THEN POP_ASSUM MP_TAC
974 THEN DISCH_THEN (LABEL_TAC"B")
975 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
976 THEN RESA_TAC
977 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
978 THEN RESA_TAC
979 THEN POP_ASSUM MP_TAC
980 THEN DISCH_THEN (LABEL_TAC"A")
981 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
982 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
983 THEN RESA_TAC
984 THEN MP_TAC(ISPECL[`s *
985       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)
986 THEN REWRITE_TAC[REAL_ABS_MUL]
987 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
988 THEN RESP_TAC
989 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`REAL_ABS_REFL)
990 THEN RESP_TAC
991 THEN REWRITE_TAC[REAL_ARITH`(A*B)*C=A*B*C`]
992 THEN DISCH_TAC
993 THEN REMOVE_THEN"B"MP_TAC
994 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
995 THEN REWRITE_TAC[VECTOR_ARITH`(s * inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x))) %
996   (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)) %
997       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3`]
998
999 THEN DISCH_TAC
1000 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)) %
1001       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;`(d:real)/ &2`;
1002 `norm
1003       (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
1004        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1005        ((&1 - s) % v + s % u - x):real^3)`;`(d:real)/ &2`;
1006 ]REAL_LT_ADD2)
1007 THEN RESA_TAC
1008 THEN POP_ASSUM MP_TAC
1009 THEN REWRITE_TAC[REAL_ARITH`d / &2 + d/ &2 = d`]
1010 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)) %
1011       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;
1012 `(inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
1013        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1014        ((&1 - s) % v + s % u - x):real^3)`]NORM_TRIANGLE)
1015 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)) %
1016       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)+
1017 (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
1018        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1019        ((&1 - s) % v + s % u - x):real^3)=(inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
1020   inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1021   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) `]
1022 THEN REAL_ARITH_TAC]]);;
1023
1024
1025
1026
1027
1028 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).
1029 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~collinear {x, v, (&1 - t) % u + t % w}
1030 /\ ~(y1=x)
1031 /\ (y1 IN aff_ge {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x)
1032
1033 ==> ?s:real. &0 <= s/\ s<= &1
1034 /\ y1=inv(norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x))%((&1 - s) % v + s % ((&1 - t) % u + t % w)-x)+x`,
1035 REPEAT STRIP_TAC
1036 THEN POP_ASSUM MP_TAC
1037 THEN DISCH_THEN(LABEL_TAC"A")
1038 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]th3)
1039 THEN RESA_TAC
1040 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]AFF_GE_1_2)
1041 THEN RESA_TAC
1042 THEN REMOVE_THEN"A" MP_TAC
1043 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist;ballnorm_fan]
1044 THEN STRIP_TAC
1045 THEN SUBGOAL_THEN`~(&1 - t1:real= &0)/\ &0 <= &1-t1` ASSUME_TAC
1046 THENL[
1047 STRIP_TAC
1048 THENL[
1049
1050 FIND_ASSUM MP_TAC`t1+t2+t3= &1:real`
1051 THEN DISCH_TAC
1052 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1053 THEN REWRITE_TAC[REAL_ARITH`(A+B)-A=B`]
1054 THEN STRIP_TAC
1055 THEN MP_TAC(REAL_ARITH`(&0 <= t2) /\ (&0 <= t3) /\(t2+t3= &0)==> t2= &0 /\ t3= &0`)
1056 THEN RESA_TAC
1057 THEN FIND_ASSUM MP_TAC`y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w)
1058 :real^3`
1059 THEN FIND_ASSUM MP_TAC`t1+t2+t3= &1:real`
1060 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
1061 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
1062 THEN REDUCE_ARITH_TAC
1063 THEN REDUCE_VECTOR_TAC
1064 THEN STRIP_TAC
1065 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
1066 THEN REDUCE_VECTOR_TAC
1067 THEN ASM_REWRITE_TAC[];
1068 REMOVE_ASSUM_TAC
1069 THEN REMOVE_ASSUM_TAC
1070 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1071 THEN POP_ASSUM MP_TAC
1072 THEN POP_ASSUM MP_TAC
1073 THEN MP_TAC(ISPECL[`t2:real`;`t3:real`]REAL_LT_ADD)
1074 THEN REAL_ARITH_TAC];
1075
1076 MP_TAC(REAL_ARITH`~(&1 - t1= &0)/\ &0 <= &1-t1==>  &0< (&1 -t1:real)`)
1077 THEN RESA_TAC
1078 THEN MP_TAC(ISPEC`(&1 -t1:real)`REAL_LE_INV)
1079 THEN RESA_TAC
1080 THEN MP_TAC(ISPEC`(&1-t1:real)`REAL_MUL_LINV)
1081 THEN RESA_TAC
1082 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t2:real)`]REAL_LE_MUL)
1083 THEN RESA_TAC
1084 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t3:real)`]REAL_LE_MUL)
1085 THEN RESA_TAC
1086 THEN FIND_ASSUM MP_TAC `t1+t2+t3= &1:real`
1087 THEN REWRITE_TAC[REAL_ARITH`A+B+C=D<=>B+C=D-A`]
1088 THEN DISCH_TAC
1089 THEN MP_TAC(SET_RULE`t2+t3 = &1-t1 ==> (inv (&1-t1))*(t2+t3) = (inv (&1-t1))* (&1-t1:real)`)
1090 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1091 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)=D<=>D- A*C=A*B`]
1092 THEN REDUCE_ARITH_TAC
1093 THEN STRIP_TAC
1094 THEN EXISTS_TAC`inv ((&1 - t1:real))*(t3:real)`
1095 THEN STRIP_TAC
1096 THENL[
1097 ASM_TAC
1098 THEN REAL_ARITH_TAC;
1099 STRIP_TAC
1100 THENL[
1101 ASM_TAC
1102 THEN REAL_ARITH_TAC;
1103 ASM_REWRITE_TAC[VECTOR_ARITH`(inv (&1 - t1) * t2) % v +
1104   (inv (&1 - t1) * t3) % ((&1 - t) % u + t % w)-x= inv (&1 - t1) %( t2 % v + t3 % ((&1 - t) % u + t % w))-x:real^3`]
1105 THEN FIND_ASSUM MP_TAC `norm(x-y1:real^3)= &1`
1106 THEN FIND_ASSUM MP_TAC `y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w):real^3`
1107 THEN DISCH_TAC
1108 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1109 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
1110 THEN REWRITE_TAC[VECTOR_ARITH`(B%A+C+D)-A=C+D-(&1-B)%A`]
1111 THEN DISCH_TAC
1112 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`)
1113 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1114 THEN ASM_REWRITE_TAC[]
1115 THEN REDUCE_ARITH_TAC
1116 THEN MP_TAC(ISPECL[`inv(&1-t1:real)`;`t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3`]NORM_MUL)
1117 THEN MP_TAC(ISPEC`inv(&1-t1:real)`REAL_ABS_REFL)
1118 THEN RESP_TAC
1119 THEN DISCH_TAC
1120 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1121 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-E%D)=A%(B+C)-(A*E)%D`]
1122 THEN REDUCE_VECTOR_TAC
1123 THEN DISCH_TAC
1124 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
1125 THEN ASM_REWRITE_TAC[REAL_INV_INV;VECTOR_ARITH`(&1-A)%(B%C-D)+D= A%D+(B*(&1-A))%C:real^3`]
1126 THEN REDUCE_VECTOR_TAC]]]);;
1127
1128
1129
1130
1131
1132 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).
1133 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~collinear {x, v, (&1 - t) % u + t % w}
1134 /\ (y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x)
1135
1136 ==> ?s:real. &0 <= s/\ s<= &1
1137 /\ y1=inv(norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x))%((&1 - s) % v + s % ((&1 - t) % u + t % w)-x)+x`,
1138 REPEAT STRIP_TAC
1139 THEN POP_ASSUM MP_TAC
1140 THEN DISCH_THEN(LABEL_TAC"A")
1141 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]th3)
1142 THEN RESA_TAC
1143 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]AFF_GT_1_2)
1144 THEN RESA_TAC
1145 THEN REMOVE_THEN"A" MP_TAC
1146 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist;ballnorm_fan]
1147 THEN STRIP_TAC
1148 THEN SUBGOAL_THEN`~(&1 - t1= &0)/\ &0 < &1-t1` ASSUME_TAC
1149 THENL[
1150 REMOVE_ASSUM_TAC
1151 THEN REMOVE_ASSUM_TAC
1152 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1153 THEN POP_ASSUM MP_TAC
1154 THEN POP_ASSUM MP_TAC
1155 THEN MP_TAC(ISPECL[`t2:real`;`t3:real`]REAL_LT_ADD)
1156 THEN REAL_ARITH_TAC;
1157
1158 MP_TAC(ISPEC`(&1 -t1:real)`REAL_LT_INV)
1159 THEN RESA_TAC
1160 THEN MP_TAC(ISPEC`(&1-t1:real)`REAL_MUL_LINV)
1161 THEN RESA_TAC
1162 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t2:real)`]REAL_LT_MUL)
1163 THEN RESA_TAC
1164 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t3:real)`]REAL_LT_MUL)
1165 THEN RESA_TAC
1166 THEN FIND_ASSUM MP_TAC `t1+t2+t3= &1:real`
1167 THEN REWRITE_TAC[REAL_ARITH`A+B+C=D<=>B+C=D-A`]
1168 THEN DISCH_TAC
1169 THEN MP_TAC(SET_RULE`t2+t3 = &1-t1 ==> (inv (&1-t1))*(t2+t3) = (inv (&1-t1))* (&1-t1:real)`)
1170 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1171 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)=D<=>D- A*C=A*B`]
1172 THEN REDUCE_ARITH_TAC
1173 THEN STRIP_TAC
1174 THEN EXISTS_TAC`inv ((&1 - t1:real))*(t3:real)`
1175 THEN STRIP_TAC
1176 THENL[
1177 ASM_TAC
1178 THEN REAL_ARITH_TAC;
1179 STRIP_TAC
1180 THENL[
1181 ASM_TAC
1182 THEN REAL_ARITH_TAC;
1183 ASM_REWRITE_TAC[VECTOR_ARITH`(inv (&1 - t1) * t2) % v +
1184   (inv (&1 - t1) * t3) % ((&1 - t) % u + t % w)-x= inv (&1 - t1) %( t2 % v + t3 % ((&1 - t) % u + t % w))-x:real^3`]
1185 THEN FIND_ASSUM MP_TAC `norm(x-y1:real^3)= &1`
1186 THEN FIND_ASSUM MP_TAC `y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w):real^3`
1187 THEN DISCH_TAC
1188 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1189 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
1190 THEN REWRITE_TAC[VECTOR_ARITH`(B%A+C+D)-A=C+D-(&1-B)%A`]
1191 THEN DISCH_TAC
1192 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`)
1193 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1194 THEN ASM_REWRITE_TAC[]
1195 THEN REDUCE_ARITH_TAC
1196 THEN MP_TAC(REAL_ARITH`&0<inv(&1-t1:real)==> &0<= inv(&1-t1:real)`)
1197 THEN RESA_TAC
1198 THEN MP_TAC(ISPECL[`inv(&1-t1:real)`;`t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3`]NORM_MUL)
1199 THEN MP_TAC(ISPEC`inv(&1-t1:real)`REAL_ABS_REFL)
1200 THEN RESP_TAC
1201 THEN DISCH_TAC
1202 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1203 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-E%D)=A%(B+C)-(A*E)%D`]
1204 THEN REDUCE_VECTOR_TAC
1205 THEN DISCH_TAC
1206 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
1207 THEN ASM_REWRITE_TAC[REAL_INV_INV;VECTOR_ARITH`(&1-A)%(B%C-D)+D= A%D+(B*(&1-A))%C:real^3`]
1208 THEN REDUCE_VECTOR_TAC]]]);;
1209
1210
1211
1212 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).
1213
1214 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
1215 /\ ~(coplanar{x,v,u,w})
1216 ==>
1217 ?h:real.
1218 (&0 < h) /\ (h<= &1)
1219 /\ 
1220 (!t:real. &0<t /\ t<h 
1221 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge {x} {v1, u1} INTER ballnorm_fan x={})`,
1222
1223 REPEAT STRIP_TAC 
1224 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1225 ` (v:real^3)`] 
1226 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1227 ` (u:real^3)`] 
1228 THEN MRESA_TAC exist_close_fan[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;
1229 `(v1:real^3)`;` (u1:real^3)`]
1230 THEN POP_ASSUM MP_TAC
1231 THEN DISCH_THEN(LABEL_TAC"THA")
1232 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)`]
1233 THEN POP_ASSUM MP_TAC
1234 THEN DISCH_THEN(LABEL_TAC"A" )
1235 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`]
1236 THEN POP_ASSUM MP_TAC
1237 THEN DISCH_THEN(LABEL_TAC"B" )
1238 THEN EXISTS_TAC`min ((h':real)/ &2) (t1:real)`
1239 THEN ASM_REWRITE_TAC[]
1240 THEN STRIP_TAC
1241 THENL(*1*)[
1242 ASM_TAC
1243 THEN REAL_ARITH_TAC;(*1*)
1244
1245 STRIP_TAC
1246 THENL(*2*)[
1247
1248 ASM_TAC
1249 THEN REAL_ARITH_TAC;(*2*)
1250
1251 REPEAT STRIP_TAC
1252 THEN REWRITE_TAC[EXTENSION]
1253 THEN GEN_TAC
1254 THEN EQ_TAC
1255 THENL(*3*)[
1256
1257 STRIP_TAC
1258 THEN REWRITE_TAC[EMPTY;IN_ELIM_THM]
1259 THEN SUBGOAL_THEN `!y1:real^3.
1260           y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x
1261 ==> ?y2:real^3.        y2 IN aff_ge {x:real^3} {(v:real^3), (u:real^3)} INTER ballnorm_fan x /\
1262           dist (y1,y2)<(h:real)` ASSUME_TAC
1263 THENL(*4*)[
1264 MP_TAC(REAL_ARITH`&0 <(t:real)/\ &0< h' /\ t < min ((h':real)/ &2) (t1:real)==> &0 <= t /\ t<=t1 /\ t< h'`)
1265 THEN RESA_TAC
1266 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
1267 THEN RESA_TAC
1268 THEN REPEAT STRIP_TAC
1269 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)`]
1270 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1271 THEN MRESA_TAC AFF_GE_1_2[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
1272 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist]
1273 THEN MRESA_TAC expansion1_convex_fan[`(v:real^3)`;` (u:real^3)`;` s:real`]
1274 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)`]
1275 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%u:real^3)` ASSUME_TAC
1276 THENL(*5*)[
1277 POP_ASSUM MP_TAC
1278 THEN MATCH_MP_TAC MONO_NOT
1279 THEN RESA_TAC;(*5*)
1280
1281 MP_TAC(ISPECL[`x:real^3`;`(&1 - s) % v + s % u:real^3`]imp_norm_not_zero_fan)
1282 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
1283 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
1284 THEN RESA_TAC
1285 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % u-x:real^3`NORM_POS_LE)
1286 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)`)
1287 THEN RESA_TAC
1288 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % u-x:real^3))`REAL_MUL_LINV)
1289 THEN RESA_TAC
1290 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % u-x:real^3))`REAL_LE_INV)
1291 THEN RESA_TAC
1292 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x)) %
1293       ((&1 - s) % v + s %  u - x) +x:real^3`
1294 THEN STRIP_TAC
1295 THENL(*6*)[
1296 STRIP_TAC
1297 THENL(*7*)[
1298 EXISTS_TAC`&1 - inv (norm ((&1 - s) % v + s % u - x:real^3)) `
1299 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x:real^3)) * (&1 - s)`
1300 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x:real^3)) * (s)`
1301 THEN REWRITE_TAC[VECTOR_ARITH`A%(B%C + a%b-c)+c=(&1-A)%c+(A*B)%C+(A*a)%b:real^3`]
1302 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-A+A*(&1-C)+A*C= &1`]
1303 THEN STRIP_TAC
1304 THEN MATCH_MP_TAC REAL_LE_MUL
1305 THEN ASM_REWRITE_TAC[]
1306 THEN ASM_TAC
1307 THEN REAL_ARITH_TAC;(*7*)
1308
1309 REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`A-(B+A)=(--B):real^3`;NORM_NEG;NORM_MUL]
1310 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % u - x:real^3))`REAL_ABS_REFL)
1311 THEN RESP_TAC
1312 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
1313
1314 ASM_REWRITE_TAC[VECTOR_ARITH`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1315   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) +
1316   x -
1317   (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) + x)=
1318 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1319   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) -
1320   (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) ):real^3`]
1321 THEN REMOVE_THEN "B" (fun th-> MP_TAC(ISPEC`t:real`th))
1322 THEN RESA_TAC
1323 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
1324 THEN RESA_TAC
1325 THEN ASM_REWRITE_TAC[NORM_SUB]](*6*)](*5*);(*4*)
1326 POP_ASSUM (fun th->MP_TAC(ISPEC`x':real^3`th))
1327 THEN MP_TAC(SET_RULE` x' IN aff_gt {x} {v, (&1 - t) % u + t % w} INTER aff_ge {x} {v1, u1} INTER
1328       ballnorm_fan x ==>  x' IN aff_ge {x} {v1, u1:real^3} INTER ballnorm_fan x
1329 /\ x' IN aff_gt {x} {v, (&1 - t) % u + t % w:real^3} INTER ballnorm_fan x`)
1330 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1331 THEN REPEAT STRIP_TAC
1332 THEN POP_ASSUM MP_TAC
1333 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
1334 THEN SIMP_TAC[]
1335 THEN REPEAT STRIP_TAC
1336 THEN REMOVE_THEN "THA" (fun th->  MP_TAC(ISPECL[`y2:real^3`;`x':real^3`]th))
1337 THEN POP_ASSUM MP_TAC
1338 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1339 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1340 THEN SIMP_TAC[dist;NORM_SUB]
1341 THEN REAL_ARITH_TAC](*4*);(*3*)
1342
1343 SET_TAC[]]]]);;
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354 let SCALE_AFF_TAC th=REPEAT GEN_TAC
1355 THEN DISCH_TAC
1356 THEN REPEAT GEN_TAC
1357 THEN MRESAL_TAC  th[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
1358 THEN STRIP_TAC
1359 THEN EXISTS_TAC`&1 - a* t2- a* t3:real`
1360 THEN EXISTS_TAC`a* t2:real`
1361 THEN EXISTS_TAC`a* t3:real`
1362 THEN ONCE_REWRITE_TAC[TAUT`A/\B/\C/\D<=>D/\ A/\B/\C`]
1363 THEN STRIP_TAC
1364 THENL[
1365 ASM_REWRITE_TAC[]
1366 THEN FIND_ASSUM MP_TAC `t1+t2+t3= &1:real`
1367 THEN REWRITE_TAC[REAL_ARITH`A+B+C= &1<=>A= &1- B -C:real`]
1368 THEN DISCH_TAC
1369 THEN ASM_REWRITE_TAC[]
1370 THEN VECTOR_ARITH_TAC;
1371
1372 MP_TAC(ISPECL[`a:real`;`(t2:real)`]REAL_LT_MUL)
1373 THEN RESA_TAC
1374 THEN MRESA_TAC REAL_LT_MUL[`a:real`;`(t3:real)`]
1375 THEN MRESA_TAC REAL_LE_MUL[`a:real`;`(t2:real)`]
1376 THEN MRESA_TAC REAL_LE_MUL[`a:real`;`(t3:real)`]
1377 THEN ASM_TAC
1378 THEN REAL_ARITH_TAC];;
1379
1380
1381 let scale_aff_ge_fan=prove(`!x:real^3 v:real^3 u:real^3.
1382      DISJOINT {x} {v,u}
1383 ==>
1384 (!y:real^3 a:real. y IN  aff_ge {x} {v,u} /\ &0 <= a==> a%(y-x)+x IN aff_ge{x} {v,u})`,
1385 SCALE_AFF_TAC AFF_GE_1_2);;
1386
1387 let scale_aff_gt_fan=prove(`!x:real^3 v:real^3 u:real^3.
1388      DISJOINT {x} {v,u}
1389 ==>
1390 (!y:real^3 a:real. y IN  aff_gt {x} {v,u} /\ &0 < a==> a%(y-x)+x IN aff_gt{x} {v,u})`,
1391 SCALE_AFF_TAC AFF_GT_1_2);;
1392
1393
1394
1395 let origin_is_not_aff_gt_fan=prove(`!x:real^3 v:real^3 u:real^3.
1396    ~(u IN aff {x,v}) /\ DISJOINT {x} {v,u}==> ~(x IN  aff_gt {x} {v,u})`,
1397 REPEAT GEN_TAC
1398 THEN STRIP_TAC
1399 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
1400 THEN REWRITE_TAC[GSYM FORALL_NOT_THM;DE_MORGAN_THM]
1401 THEN REPEAT STRIP_TAC 
1402 THEN DISJ_CASES_TAC(REAL_ARITH`~( &0< (t2:real))\/ ( &0< (t2:real))`)
1403 THENL[ASM_MESON_TAC[];
1404 DISJ_CASES_TAC(REAL_ARITH`~( &0< (t3:real))\/ ( &0< (t3:real))`)
1405 THENL[ASM_MESON_TAC[];
1406 DISJ_CASES_TAC(REAL_ARITH`~( t1+t2+(t3:real)= &1)\/ (  t1+t2+(t3:real)= &1)`)
1407 THENL[ASM_MESON_TAC[];
1408 ASM_REWRITE_TAC[]
1409 THEN POP_ASSUM MP_TAC
1410 THEN REWRITE_TAC[REAL_ARITH`A+B+C= &1<=>A= &1- B -C:real`]
1411 THEN DISCH_TAC
1412 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1413 THEN RESA_TAC
1414 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
1415 THEN RESA_TAC
1416 THEN ASM_REWRITE_TAC[]
1417 THEN REWRITE_TAC[VECTOR_ARITH`A=( &1-B-C) %A+B%E+C%D <=> C%(D-A)= (--B)%(E-A)`]
1418 THEN STRIP_TAC
1419 THEN MP_TAC(SET_RULE`t3 % (u - x) = (--t2) % (v - x):real^3 ==> (inv (t3))%(t3 % (u - x)) = (inv (t3))%((--t2) % (v - x))`)
1420 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1421 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`]
1422 THEN REDUCE_VECTOR_TAC
1423 THEN REWRITE_TAC[VECTOR_ARITH`A-B=C%(V-B)<=>A=( &1-C)%B+C%V`]
1424 THEN FIND_ASSUM MP_TAC `~(u IN aff {x,v}:real^3->bool)`
1425 THEN MATCH_MP_TAC MONO_NOT
1426 THEN STRIP_TAC
1427 THEN REWRITE_TAC[aff; AFFINE_HULL_2; IN_ELIM_THM]
1428 THEN EXISTS_TAC`&1 - inv t3 * --t2:real`
1429 THEN EXISTS_TAC`inv t3 * --t2:real`
1430 THEN ASM_REWRITE_TAC[]
1431 THEN REAL_ARITH_TAC]]]);;
1432
1433 let fan_run_in_small1_is_fan=prove(
1434 `!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.
1435 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
1436 /\ ~(coplanar{x,v,u,w})
1437 ==> 
1438 ?t1:real. &0 < t1 /\ t1 <= &1
1439 /\ (!t:real. &0< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={})`,
1440
1441 REPEAT STRIP_TAC 
1442 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1443 ` (v:real^3)`]
1444 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
1445 ` (v1:real^3)`]  
1446 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)`]
1447 THEN POP_ASSUM MP_TAC
1448 THEN DISCH_THEN (LABEL_TAC"BA")
1449 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)`]
1450 THEN POP_ASSUM MP_TAC
1451 THEN DISCH_THEN (LABEL_TAC"A")
1452 THEN REPEAT STRIP_TAC
1453 THEN MP_TAC(REAL_ARITH` &0 < t1/\ &0 < h ==> &0 < min (h:real) (t1:real)`)
1454 THEN RESA_TAC
1455 THEN MP_TAC(REAL_ARITH`  t1 <= &1  /\ h <= &1==>  min (h:real) (t1:real)<= &1`)
1456 THEN RESA_TAC
1457 THEN EXISTS_TAC`min (h:real) (t1:real)`
1458 THEN ASM_REWRITE_TAC[]
1459 THEN REPEAT STRIP_TAC
1460 THEN MP_TAC(REAL_ARITH`  &0 < t /\ t<  min (h:real) (t1:real)==> t< h /\ t<= t1 /\ &0 <= t`)
1461 THEN RESA_TAC
1462 THEN REMOVE_THEN "A"(fun th-> MRESA1_TAC th `(t:real)`)
1463 THEN POP_ASSUM MP_TAC
1464 THEN DISCH_THEN (LABEL_TAC"A")
1465 THEN REMOVE_THEN "BA"(fun th-> MRESA1_TAC th `(t:real)`)
1466 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1467 THEN MRESA_TAC origin_is_not_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
1468 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
1469 THEN GEN_TAC
1470 THEN EQ_TAC
1471 THENL[ REPEAT STRIP_TAC
1472 THEN SUBGOAL_THEN`~(x=x':real^3)`ASSUME_TAC
1473 THENL[
1474 POP_ASSUM MP_TAC
1475 THEN POP_ASSUM MP_TAC
1476 THEN POP_ASSUM MP_TAC
1477 THEN SET_TAC[];
1478 MRESA_TAC imp_norm_not_zero_fan[`x':real^3`;`x:real^3`]
1479 THEN ASSUME_TAC(ISPEC`x'-x:real^3`NORM_POS_LE)
1480 THEN MP_TAC(REAL_ARITH`~(norm(x'-x:real^3)= &0) /\ &0 <= norm(x'-x:real^3)==> &0 <norm(x'-x:real^3)`)
1481 THEN RESA_TAC
1482 THEN MRESA1_TAC REAL_LE_INV `norm(x'-x:real^3)`
1483 THEN MRESA1_TAC REAL_LT_INV `norm(x'-x:real^3)`
1484 THEN MRESA1_TAC REAL_MUL_LINV `norm(x'-x:real^3)`
1485 THEN MRESA_TAC scale_aff_ge_fan[`x:real^3`;`v1:real^3`;`u1:real^3`]
1486 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
1487 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
1488 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
1489 THEN SUBGOAL_THEN`inv (norm (x' - x)) % (x' - x) + x IN ballnorm_fan x:real^3->bool` ASSUME_TAC
1490 THENL[
1491 MRESA1_TAC REAL_ABS_REFL `inv(norm(x'-x:real^3))`
1492 THEN ASM_REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`B-(A+B)= --A:real^3`;NORM_NEG;NORM_MUL];
1493
1494 ASM_TAC
1495 THEN SET_TAC[]]];
1496
1497 SET_TAC[]]);;
1498
1499
1500
1501
1502
1503
1504
1505
1506 let azim_line_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 t:real^1.
1507 ~coplanar {x,v,u,(&1-drop(t))%u+drop(t)%w}
1508 ==> (\(t:real^1). azim x v u ((&1 - drop(t)) % u + drop(t) % w)) real_continuous at t`,
1509 REPEAT STRIP_TAC
1510 THEN REWRITE_TAC[REAL_CONTINUOUS_CONTINUOUS1; o_DEF; CONTINUOUS_AT_LIFT_COMPONENT]
1511 THEN MP_TAC(ISPECL[`(\(t:real^1). ((&1 - drop(t)) % (u:real^3) + drop(t) %(w:real^3)))`;`(\(w:real^3). lift(azim (x:real^3) (v:real^3) (u:real^3) w))`;`t:real^1`] CONTINUOUS_AT_COMPOSE)
1512 THEN REWRITE_TAC[o_DEF]
1513 THEN DISCH_TAC
1514 THEN POP_ASSUM MATCH_MP_TAC
1515 THEN REWRITE_TAC[ISPECL[`u:real^3`;`w:real^3`;`t:real^1`]collinear1_continuous_fan]
1516 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`u:real^3`;`((&1 - drop(t)) % (u:real^3) + drop(t) %(w:real^3))`]REAL_CONTINUOUS_AT_AZIM)
1517 THEN REWRITE_TAC[REAL_CONTINUOUS_CONTINUOUS1; o_DEF; CONTINUOUS_AT_LIFT_COMPONENT]
1518 THEN ASM_MESON_TAC[]);;
1519
1520
1521
1522
1523 (******fully surrounded*******)
1524
1525 let fan81=new_definition`fan81 (x:real^3,(V:real^3->bool),(E:(real^3->bool)->bool)):bool<=>(!v:real^3 u:real^3. {v,u} IN E ==> azim_fan x V E v u <pi)`;;
1526
1527 let fan80=new_definition`fan80 (x:real^3,(V:real^3->bool),(E:(real^3->bool)->bool)):bool<=>(!v:real^3 u:real^3. {v,u} IN E ==> &0< azim x v u (sigma_fan x V E v u) /\ azim x v u (sigma_fan x V E v u) <pi)`;;
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538 let continuous_coplanar_fan=prove(`!x:real^3  v:real^3 u:real^3 w:real^3.
1539  ~(coplanar{x,v,u,w})
1540 ==>(!t:real.  ~(t= &0) ==> ~coplanar {x,v,u,(&1-t)%u+t%w} )`,
1541 REPEAT STRIP_TAC
1542 THEN POP_ASSUM MP_TAC
1543 THEN REWRITE_TAC[]
1544 THEN FIND_ASSUM MP_TAC`~(coplanar{x,v,u,w:real^3})`
1545 THEN MATCH_MP_TAC MONO_NOT
1546 THEN REWRITE_TAC[COPLANAR_DET_EQ_0;VECTOR_ARITH`((&1 - t) % u + t % w) - x=(&1 - t) % (u-x) + t % (w - x):real^3`;DET_3;VECTOR_3;VECTOR_ADD_COMPONENT;VECTOR_MUL_COMPONENT
1547 ;REAL_ARITH`(v - x)$1 * (u - x)$2 * ((&1 - t) * (u - x)$3 + t * (w - x)$3) +
1548  (v - x)$2 * (u - x)$3 * ((&1 - t) * (u - x)$1 + t * (w - x)$1) +
1549  (v - x)$3 * (u - x)$1 * ((&1 - t) * (u - x)$2 + t * (w - x)$2) -
1550  (v - x)$1 * (u - x)$3 * ((&1 - t) * (u - x)$2 + t * (w - x)$2) -
1551  (v - x)$2 * (u - x)$1 * ((&1 - t) * (u - x)$3 + t * (w - x)$3) -
1552  (v - x)$3 * (u - x)$2 * ((&1 - t) * (u - x)$1 + t * (w - x)$1)=
1553 t*((v - x)$1 * (u - x)$2 * ((w - x)$3) +
1554  (v - x)$2 * (u - x)$3 * ( (w - x)$1) +
1555  (v - x)$3 * (u - x)$1 * ((w - x)$2) -
1556  (v - x)$1 * (u - x)$3 * ((w - x)$2) -
1557  (v - x)$2 * (u - x)$1 * ( (w - x)$3) -
1558  (v - x)$3 * (u - x)$2 * ( (w - x)$1)):real`;REAL_ENTIRE]
1559 THEN ASM_TAC
1560 THEN REAL_ARITH_TAC);;
1561
1562
1563
1564
1565
1566 let open_is_not_zero_fan=prove(`open{y:real^1 | ?x. ~(x = &0) /\ y = lift x}`,
1567 (let equality_real_fan=prove(`{y:real^1 | ?x. ~(x = &0) /\ y = lift x}={y:real^1 | ~(drop y = &0)}`,
1568 REWRITE_TAC[EXTENSION;IN_ELIM_THM]
1569 THEN GEN_TAC
1570 THEN EQ_TAC
1571 THENL[
1572 STRIP_TAC
1573 THEN ASM_REWRITE_TAC[LIFT_DROP];
1574 STRIP_TAC
1575 THEN EXISTS_TAC`drop (x:real^1)`
1576 THEN ASM_REWRITE_TAC[LIFT_DROP]])in
1577 (let ngu=prove(`{x | x IN (:real^1) /\ x = vec 0}={x | x IN (:real^1) /\ x$1 = &0}`,
1578 REWRITE_TAC[EXTENSION;IN_ELIM_THM]
1579 THEN GEN_TAC
1580 THEN EQ_TAC
1581 THENL[STRIP_TAC
1582 THEN ASM_REWRITE_TAC[VEC_COMPONENT];
1583 SIMP_TAC[IN_UNIV;CART_EQ;LAMBDA_BETA;VEC_COMPONENT;DIMINDEX_1;ARITH_RULE`1<=i /\ i<=1<=>i=1`]])
1584 in
1585 REWRITE_TAC[equality_real_fan]
1586 THEN REWRITE_TAC[OPEN_CLOSED;DIFF; IN_ELIM_THM;]
1587 THEN MP_TAC(ISPECL[`(\(t:real^1). t)`;`(:real^1)`;`(vec 0):real^1`]CONTINUOUS_CLOSED_PREIMAGE_CONSTANT)
1588 THEN MP_TAC(ISPECL[`0`;`1`]VEC_COMPONENT)
1589 THEN SIMP_TAC[CONTINUOUS_ON_ID;CLOSED_UNIV; DIMINDEX_1;drop;ngu])));;
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601 let azim_continuous_when_not_coplanar=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
1602 ~coplanar {x,v,u,w}
1603 ==> (\(t:real). azim x v u ((&1 - t) % u + t % w)) real_continuous_on {t:real| ~(t= &0)}`,
1604 REWRITE_TAC[REAL_CONTINUOUS_ON;o_DEF;IMAGE;IN_ELIM_THM]
1605 THEN REPEAT STRIP_TAC
1606 THEN ASSUME_TAC(open_is_not_zero_fan)
1607 THEN MRESA_TAC CONTINUOUS_ON_EQ_CONTINUOUS_AT[`(\t:real^1. lift (azim x v u ((&1 - drop t) % u + drop t % w))):real^1->real^1`;`{y:real^1| ?x. ~(x = &0) /\ y = lift x}`]
1608 THEN REWRITE_TAC[IN_ELIM_THM]
1609 THEN REPEAT STRIP_TAC
1610 THEN ASM_REWRITE_TAC[LIFT_DROP]
1611 THEN MRESAL_TAC azim_line_fan[`x:real^3`;` v:real^3`;` u:real^3`;` w:real^3`;` (lift x''):real^1`][REAL_CONTINUOUS_CONTINUOUS1; o_DEF;LIFT_DROP]
1612 THEN POP_ASSUM MATCH_MP_TAC
1613 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
1614 THEN POP_ASSUM (fun th-> MRESA1_TAC th `x'':real`));;
1615
1616
1617 let injective_azim_coplanar=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
1618 ~coplanar {x,v,u,w}
1619 ==> 
1620 !a:real b:real. ~(a= &0) /\ ~(b= &0)/\ (\(t:real). azim x v u ((&1 - t) % u + t % w))a=(\(t:real). azim x v u ((&1 - t) % u + t % w))b==>a=b`,
1621 REWRITE_TAC[]
1622 THEN REPEAT STRIP_TAC
1623 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
1624 THEN POP_ASSUM(fun th -> MP_TAC(ISPEC`a:real`th)THEN ASSUME_TAC(th))
1625 THEN POP_ASSUM(fun th -> MP_TAC(ISPEC`b:real`th))
1626 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
1627 THEN ASM_REWRITE_TAC[]
1628 THEN REPEAT STRIP_TAC
1629 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
1630 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`;`u:real^3`]
1631 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`(&1 - b) % u + b % w:real^3`;`u:real^3`]
1632 THEN MRESA_TAC AZIM_EQ [`x:real^3`;`v:real^3`;`u:real^3`;`(&1 - b) % u + b % w:real^3`;`(&1 - a) % u + a % w:real^3`;]
1633 THEN MRESA_TAC AZIM_EQ_0 [`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`;`(&1 - b) % u + b % w:real^3`;]
1634 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR [`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`;`(&1 - b) % u + b % w:real^3`;]
1635 THEN POP_ASSUM MP_TAC
1636 THEN FIND_ASSUM MP_TAC`~coplanar {x,v,u,w:real^3}`
1637 THEN REWRITE_TAC[COPLANAR_DET_EQ_0;VECTOR_ARITH`((&1 - t) % u + t % w) - x=(&1 - t) % (u-x) + t % (w - x):real^3`;DET_3;VECTOR_3;VECTOR_ADD_COMPONENT;VECTOR_MUL_COMPONENT]
1638 THEN STRIP_TAC
1639 THEN REWRITE_TAC[REAL_ARITH`(v - x)$1 *
1640  ((&1 - a) * (u - x)$2 + a * (w - x)$2) *
1641  ((&1 - b) * (u - x)$3 + b * (w - x)$3) +
1642  (v - x)$2 *
1643  ((&1 - a) * (u - x)$3 + a * (w - x)$3) *
1644  ((&1 - b) * (u - x)$1 + b * (w - x)$1) +
1645  (v - x)$3 *
1646  ((&1 - a) * (u - x)$1 + a * (w - x)$1) *
1647  ((&1 - b) * (u - x)$2 + b * (w - x)$2) -
1648  (v - x)$1 *
1649  ((&1 - a) * (u - x)$3 + a * (w - x)$3) *
1650  ((&1 - b) * (u - x)$2 + b * (w - x)$2) -
1651  (v - x)$2 *
1652  ((&1 - a) * (u - x)$1 + a * (w - x)$1) *
1653  ((&1 - b) * (u - x)$3 + b * (w - x)$3) -
1654  (v - x)$3 *
1655  ((&1 - a) * (u - x)$2 + a * (w - x)$2) *
1656  ((&1 - b) * (u - x)$1 + b * (w - x)$1)=
1657 (b-a)*((v - x)$1 * (u - x)$2 * (w - x)$3 +
1658    (v - x)$2 * (u - x)$3 * (w - x)$1 +
1659    (v - x)$3 * (u - x)$1 * (w - x)$2 -
1660    (v - x)$1 * (u - x)$3 * (w - x)$2 -
1661    (v - x)$2 * (u - x)$1 * (w - x)$3 -
1662    (v - x)$3 * (u - x)$2 * (w - x)$1)`;REAL_ENTIRE]
1663 THEN ASM_REWRITE_TAC[]
1664 THEN REAL_ARITH_TAC);;
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677 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.
1678 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
1679 /\ ~coplanar {x,v,u,w}
1680 ==> 
1681 ?t1:real. &0<t1 /\ t1<= &1
1682 /\ (!t:real. &0< t /\ t<= t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
1683
1684 REPEAT STRIP_TAC
1685 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)`]
1686 THEN POP_ASSUM MP_TAC
1687 THEN DISCH_THEN (LABEL_TAC"A")
1688 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)`)
1689 THENL(*1*)[
1690 POP_ASSUM MP_TAC
1691 THEN STRIP_TAC
1692 THEN EXISTS_TAC`min (t1:real) ((h:real)/ &2)`
1693 THEN STRIP_TAC
1694 THENL(*2*)[
1695 ASM_TAC
1696 THEN REAL_ARITH_TAC;(*2*)
1697
1698 STRIP_TAC
1699 THENL(*3*)[ASM_TAC
1700 THEN REAL_ARITH_TAC;(*3*)
1701 REPEAT STRIP_TAC
1702 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
1703 THEN RESA_TAC
1704 THEN MP_TAC(REAL_ARITH`(t:real)<= min (t1:real) (h:real/ &2) ==> t <= t1`)
1705 THEN RESA_TAC
1706 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1707 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1708 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1709 ` (v:real^3)`]
1710 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1711 ` (v:real^3)`]  
1712 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
1713 THEN GEN_TAC
1714 THEN EQ_TAC
1715 THENL(*4*)[
1716 DISCH_TAC
1717 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
1718 THENL(*5*)[
1719 POP_ASSUM MP_TAC
1720 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1721 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1722 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1723 THEN STRIP_TAC
1724 THEN POP_ASSUM MP_TAC
1725 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1726  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
1727  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
1728 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1729 THEN RESA_TAC
1730 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
1731 THEN STRIP_TAC
1732 THEN MP_TAC(SET_RULE`
1733 t3 % ((&1 - t) % u + t % w) = (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3 
1734 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1''-t1') % x + (t2'-t2) % v + t3' % w1)`)
1735 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1736 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`]
1737 THEN REDUCE_VECTOR_TAC
1738 THEN STRIP_TAC
1739 THEN FIND_ASSUM MP_TAC`t1'' + t2' + t3' = &1:real`
1740 THEN FIND_ASSUM MP_TAC`t1' + t2 + t3 = &1:real`
1741 THEN DISCH_TAC 
1742 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
1743 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
1744 THEN STRIP_TAC
1745 THEN MP_TAC(SET_RULE`
1746 (t1''-t1') + (t2'-t2) + t3' = t3
1747 ==> (inv (t3))*((t1''-t1') + (t2'-t2) + t3') = (inv (t3))*t3`)
1748 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1749 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
1750 THEN STRIP_TAC
1751 THEN EXISTS_TAC`inv t3 * (t1'' - t1'):real`
1752 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
1753 THEN EXISTS_TAC`inv t3 * t3':real`
1754 THEN ASM_REWRITE_TAC[]
1755 THEN MATCH_MP_TAC REAL_LE_MUL
1756 THEN ASM_REWRITE_TAC[]
1757 THEN MATCH_MP_TAC REAL_LE_INV
1758 THEN ASM_TAC
1759 THEN REAL_ARITH_TAC;(*5*)
1760 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1761 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1762 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`;]
1763 THEN MRESA_TAC injective_azim_coplanar[`x:real^3`;` v:real^3`;` u:real^3`;` w:real^3`]
1764 THEN POP_ASSUM (fun th->MRESA_TAC th [`h:real`;`t:real`])
1765 THEN ASM_TAC
1766 THEN REAL_ARITH_TAC](*5*)(*4*);
1767 SET_TAC[]]]];(*1*)
1768 POP_ASSUM MP_TAC
1769 THEN ONCE_REWRITE_TAC[NOT_EXISTS_THM]
1770 THEN DISCH_THEN(LABEL_TAC"B")
1771 THEN EXISTS_TAC`t1:real`
1772 THEN ASM_REWRITE_TAC[]
1773 THEN REPEAT STRIP_TAC
1774 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
1775 THEN RESA_TAC
1776 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1777 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1778 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1779 ` (v:real^3)`]
1780 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1781 ` (v:real^3)`]  
1782 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
1783 THEN GEN_TAC
1784 THEN EQ_TAC
1785 THENL(*2*)[
1786 DISCH_TAC
1787 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
1788 THENL(*3*)[
1789 POP_ASSUM MP_TAC
1790 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1791 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1792 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1793 THEN STRIP_TAC
1794 THEN POP_ASSUM MP_TAC
1795 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1796  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
1797  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
1798 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1799 THEN RESA_TAC
1800 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
1801 THEN STRIP_TAC
1802 THEN MP_TAC(SET_RULE`
1803 t3 % ((&1 - t) % u + t % w) = (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3 
1804 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1''-t1') % x + (t2'-t2) % v + t3' % w1)`)
1805 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1806 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`]
1807 THEN REDUCE_VECTOR_TAC
1808 THEN STRIP_TAC
1809 THEN FIND_ASSUM MP_TAC`t1'' + t2' + t3' = &1:real`
1810 THEN FIND_ASSUM MP_TAC`t1' + t2 + t3 = &1:real`
1811 THEN DISCH_TAC 
1812 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
1813 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
1814 THEN STRIP_TAC
1815 THEN MP_TAC(SET_RULE`
1816 (t1''-t1') + (t2'-t2) + t3' = t3
1817 ==> (inv (t3))*((t1''-t1') + (t2'-t2) + t3') = (inv (t3))*t3`)
1818 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1819 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
1820 THEN STRIP_TAC
1821 THEN EXISTS_TAC`inv t3 * (t1'' - t1'):real`
1822 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
1823 THEN EXISTS_TAC`inv t3 * t3':real`
1824 THEN ASM_REWRITE_TAC[]
1825 THEN MATCH_MP_TAC REAL_LE_MUL
1826 THEN ASM_REWRITE_TAC[]
1827 THEN MATCH_MP_TAC REAL_LE_INV
1828 THEN ASM_TAC
1829 THEN REAL_ARITH_TAC;(*3*)
1830 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1831 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1832 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`;]
1833 THEN REMOVE_THEN "B"(fun th -> MRESAL1_TAC th `t:real`[DE_MORGAN_THM])
1834 THEN ASM_TAC
1835 THEN REAL_ARITH_TAC];
1836 SET_TAC[]]]);;
1837
1838
1839
1840 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.
1841 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
1842 /\ ~coplanar {x,v,u,w}
1843 ==> 
1844 ?t1:real. &0<t1 /\ t1<= &1
1845 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
1846 REPEAT STRIP_TAC
1847 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`]
1848 THEN POP_ASSUM MP_TAC
1849 THEN DISCH_THEN(LABEL_TAC"A")
1850 THEN EXISTS_TAC`t1:real`
1851 THEN ASM_REWRITE_TAC[]
1852 THEN REPEAT STRIP_TAC
1853 THEN MP_TAC(REAL_ARITH`t<t1==>t<=t1`)
1854 THEN ASM_REWRITE_TAC[]
1855 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`));;
1856
1857
1858
1859 let AFF_GT_2_2=prove(`!x u v w.
1860          DISJOINT {x,  u} {v, w}
1861          ==> aff_gt {x, u} {v, w} =
1862              {y | ?t1 t2 t3 t4.
1863                       &0 < t3 /\
1864                       &0 < t4 /\
1865                       t1 + t2 + t3 +t4= &1 /\
1866                       y = t1 % x + t2 %u + t3 % v + t4 % w}`,
1867 AFF_TAC);;
1868
1869
1870
1871 let extension_in_aff_2_2_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
1872 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
1873 ==> 
1874 (!t:real. &0< t /\ t< &1
1875 ==> (!t1:real t2:real t3:real. &0<t3  /\ &0<t2 /\ t1+t2+t3= &1
1876 ==>t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w) IN aff_gt {x,u} {w,v}))`,
1877 REPEAT STRIP_TAC
1878 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1879 ` (v:real^3)`] 
1880 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1881 ` (u:real^3)`] 
1882 THEN SUBGOAL_THEN `DISJOINT {x,u:real^3} {w,v:real^3}` ASSUME_TAC
1883 THENL[
1884 REWRITE_TAC[DISJOINT_SYM;SET_RULE`{v:real^3,w:real^3}= {v} UNION {w}`;DISJOINT_UNION]
1885 THEN REWRITE_TAC[SET_RULE`{v} UNION {w}={v:real^3,w:real^3}`]
1886 THEN ONCE_REWRITE_TAC[DISJOINT_SYM]
1887 THEN ASM_REWRITE_TAC[];
1888 MRESAL_TAC AFF_GT_2_2[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`][IN_ELIM_THM]
1889 THEN EXISTS_TAC`t1:real`
1890 THEN EXISTS_TAC`t3*(&1-t):real`
1891 THEN EXISTS_TAC`t3*(t):real`
1892 THEN EXISTS_TAC`t2:real`
1893 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) =
1894  t1 % x + (t3 * (&1 - t)) % u  + (t3 * t) % w+ t2 % v:real^3`]
1895 THEN MATCH_MP_TAC REAL_LT_MUL
1896 THEN ASM_TAC
1897 THEN REAL_ARITH_TAC]);;
1898
1899
1900
1901 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.
1902 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ 
1903 (&0< azim x u w v ) /\ (azim x u w v <pi)
1904 ==> 
1905 (!t:real. &0< t /\ t< &1
1906 ==> (!t1:real t2:real t3:real. &0<t3  /\ &0<t2 /\ t1+t2+t3= &1
1907 ==> &0< azim x u w (t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w))
1908 /\ azim x u w (t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w))< azim x u w v))`,
1909
1910 REPEAT STRIP_TAC
1911 THEN FIND_ASSUM MP_TAC`{v,u} IN (E:(real^3->bool)->bool)`
1912 THEN ONCE_REWRITE_TAC[SET_RULE`{v,u}={u,v}`]
1913 THEN STRIP_TAC
1914 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
1915 ` (u:real^3)`] 
1916 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1917 ` (u:real^3)`] 
1918 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;` u:real^3`;`w:real^3`;`v:real^3`]
1919 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
1920 THEN DISCH_TAC
1921 THEN MRESA_TAC extension_in_aff_2_2_fan[`x:real^3`;` v:real^3`;`u:real^3`;`w:real^3`]
1922 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
1923 THEN POP_ASSUM(fun th-> MRESAL_TAC th [`t1:real`;`t2:real`;`t3:real`][wedge;IN_ELIM_THM]));;
1924
1925
1926
1927 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.
1928 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {u,w1} IN E 
1929 /\ ~coplanar {x,v,u,w} /\ sigma_fan x V E u w=v
1930 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1931 ==> 
1932 ?t1:real. &0<t1 /\ t1<= &1
1933 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {u,w1}={})`,
1934 REPEAT STRIP_TAC
1935 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)`]
1936 THEN POP_ASSUM MP_TAC
1937 THEN DISCH_THEN (LABEL_TAC"A")
1938 THEN EXISTS_TAC`t1:real`
1939 THEN ASM_REWRITE_TAC[]
1940 THEN REPEAT STRIP_TAC
1941 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t /\ ~(t= &0)`)
1942 THEN RESA_TAC
1943 THEN MP_TAC(REAL_ARITH`t<t1 /\ t1<= &1==>t<=t1 /\ t< &1`)
1944 THEN RESA_TAC
1945 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1946 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1947 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1948 ` (v:real^3)`]
1949 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1950 ` (u:real^3)`]  
1951 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
1952 THEN GEN_TAC
1953 THEN EQ_TAC
1954 THENL(*1*)[
1955 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1956 THEN STRIP_TAC
1957 THEN SUBGOAL_THEN `x' IN (aff_ge {x,u} {w1}:real^3->bool)`ASSUME_TAC
1958 THENL(*2*)[
1959 POP_ASSUM MP_TAC
1960 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
1961 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
1962 THEN STRIP_TAC
1963 THEN EXISTS_TAC`t1'':real`
1964 THEN EXISTS_TAC`t2':real`
1965 THEN EXISTS_TAC`t3':real`
1966 THEN ASM_REWRITE_TAC[];(*2*)
1967
1968 POP_ASSUM MP_TAC
1969 THEN ASM_REWRITE_TAC[]
1970 THEN STRIP_TAC
1971 THEN MRESA_TAC inequality3_aim_in_convex_fan
1972 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
1973 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
1974 THEN POP_ASSUM(fun th-> MRESA_TAC th [`t1':real`;`t2:real`;`t3:real`])
1975 THEN POP_ASSUM MP_TAC
1976 THEN POP_ASSUM MP_TAC
1977 THEN DISCH_THEN(LABEL_TAC"BE")
1978 THEN DISCH_THEN(LABEL_TAC"YEU")
1979 THEN SUBGOAL_THEN`~collinear {x, u, x':real^3}`ASSUME_TAC
1980 THENL(*3*)[
1981 MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
1982 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
1983 THEN ASM_REWRITE_TAC[collinear_fan;]
1984 THEN POP_ASSUM MP_TAC
1985 THEN MATCH_MP_TAC MONO_NOT
1986 THEN REWRITE_TAC[coplanar;aff; AFFINE_HULL_2;IN_ELIM_THM]
1987 THEN STRIP_TAC
1988 THEN EXISTS_TAC`x:real^3`
1989 THEN EXISTS_TAC`v:real^3`
1990 THEN EXISTS_TAC`u:real^3`
1991 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1992 THENL(*4*)[
1993 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1994 THEN EXISTS_TAC`&1`
1995 THEN EXISTS_TAC`&0`
1996 THEN EXISTS_TAC`&0`
1997 THEN REDUCE_ARITH_TAC
1998 THEN VECTOR_ARITH_TAC;(*4*)
1999
2000 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
2001 THENL(*5*)[
2002 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
2003 THEN EXISTS_TAC`&0`
2004 THEN EXISTS_TAC`&1`
2005 THEN EXISTS_TAC`&0`
2006 THEN REDUCE_ARITH_TAC
2007 THEN VECTOR_ARITH_TAC;(*5*)
2008
2009 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
2010 THENL(*6*)[
2011 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
2012 THEN EXISTS_TAC`&0`
2013 THEN EXISTS_TAC`&0`
2014 THEN EXISTS_TAC`&1`
2015 THEN REDUCE_ARITH_TAC
2016 THEN VECTOR_ARITH_TAC;(*6*)
2017
2018 SUBGOAL_THEN`((&1 - t) % u + t % w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
2019 THENL(*7*)[
2020 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
2021 THEN REMOVE_ASSUM_TAC
2022 THEN REMOVE_ASSUM_TAC
2023 THEN REMOVE_ASSUM_TAC
2024 THEN POP_ASSUM MP_TAC
2025 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
2026 THEN RESA_TAC
2027 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
2028 THEN RESA_TAC
2029 THEN ASM_REWRITE_TAC[]
2030 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) = u' % x + v' % u
2031 <=>t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u:real^3`]
2032 THEN STRIP_TAC
2033 THEN MP_TAC(SET_RULE`
2034 t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u
2035 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w) ) = (inv (t3))%((u'-t1') % x -t2 % v+v' % u):real^3`)
2036 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2037 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B-C+D)=A%B-A%C+A%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
2038 THEN REDUCE_VECTOR_TAC
2039 THEN STRIP_TAC
2040 THEN EXISTS_TAC`(inv t3 * (u' - t1')):real`
2041 THEN EXISTS_TAC`-- (inv t3 * t2):real`
2042 THEN EXISTS_TAC`(inv t3 * v'):real`
2043 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*)
2044
2045 ASM_TAC
2046 THEN SET_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
2047  
2048 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2049 ` (u:real^3)`]
2050 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
2051 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
2052 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`;`x':real^3`;]
2053 THEN REMOVE_THEN"BE" MP_TAC
2054 THEN REMOVE_THEN"YEU" MP_TAC
2055 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2056 THEN FIND_ASSUM MP_TAC`(sigma_fan x V E u w = (v:real^3))`
2057 THEN DISCH_TAC
2058 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2059 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge u V E = {w:real^3}) \/ ~(set_of_edge u V E = {w})`)
2060 THENL(*4*)[
2061 FIND_ASSUM MP_TAC`w1 IN set_of_edge (u:real^3) V E`
2062 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th);IN_SING])
2063 THEN DISCH_TAC
2064 THEN ASM_REWRITE_TAC[]
2065 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
2066 THEN REAL_ARITH_TAC;(*4*)
2067
2068 DISJ_CASES_TAC(SET_RULE`(w1:real^3)=w \/ ~((w1:real^3)=w)`)
2069 THENL(*5*)[
2070 ASM_REWRITE_TAC[]
2071 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
2072 THEN REAL_ARITH_TAC;(*5*)
2073
2074 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`]
2075 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
2076 THEN POP_ASSUM MP_TAC
2077 THEN REAL_ARITH_TAC]]]];
2078
2079 SET_TAC[]]);;
2080
2081
2082
2083
2084
2085 let 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.
2086 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2087 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
2088 ==> ~coplanar {x,v,u,w}`,
2089 REPEAT STRIP_TAC
2090 THEN POP_ASSUM MP_TAC
2091 THEN REWRITE_TAC[SET_RULE`{x,v,u,w}={x,u,w,v}`]
2092 THEN STRIP_TAC
2093 THEN FIND_ASSUM MP_TAC`{v,u} IN (E:(real^3->bool)->bool)`
2094 THEN REWRITE_TAC[SET_RULE`{v,u}={u,v}`]
2095 THEN STRIP_TAC
2096 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
2097 ` (u:real^3)`]
2098 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2099 ` (u:real^3)`]  
2100 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
2101 THEN ASM_TAC
2102 THEN REAL_ARITH_TAC);;
2103
2104
2105
2106
2107
2108
2109
2110 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.
2111 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v1,w1} IN E 
2112 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
2113 /\ sigma_fan x V E u w = v
2114 ==> 
2115 ?t1:real. &0<t1 /\ t1<= &1
2116 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,w1}={})`,
2117 (let lem=prove(`!x v v1. aff_ge {x} {v1, v}=aff_ge {x} {v, v1}`,
2118 REPEAT STRIP_TAC
2119 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
2120 THEN SIMP_TAC[]) in
2121
2122 REPEAT STRIP_TAC
2123 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`]
2124 THEN DISJ_CASES_TAC(SET_RULE`(v1=v)\/ ~(v1=v:real^3)`)
2125 THENL[
2126 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`];
2127
2128 DISJ_CASES_TAC(SET_RULE`(v1=u)\/ ~(v1=u:real^3)`)
2129 THENL[
2130 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`];
2131  DISJ_CASES_TAC(SET_RULE`(w1=v)\/ ~(w1=v:real^3)`)
2132 THENL[
2133 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
2134 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
2135 THEN STRIP_TAC
2136 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`]
2137 THEN EXISTS_TAC`t1:real`
2138 THEN ASM_REWRITE_TAC[lem];
2139 DISJ_CASES_TAC(SET_RULE`(w1=u)\/ ~(w1=u:real^3)`)
2140 THENL[
2141 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
2142 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
2143 THEN STRIP_TAC
2144 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`]
2145 THEN EXISTS_TAC`t1:real`
2146 THEN ASM_REWRITE_TAC[lem];
2147 SUBGOAL_THEN`{v,u} INTER {v1,w1:real^3}={}` ASSUME_TAC
2148 THENL[
2149 ASM_TAC
2150 THEN SET_TAC[];
2151 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`]]]]]]));;
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161 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.
2162 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ E' SUBSET E
2163 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
2164 /\ sigma_fan x V E u w = v
2165 ==>
2166 ?h:real. &0<h /\ h<= &1
2167 /\ (!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}={})`,
2168
2169 REPEAT STRIP_TAC 
2170 THEN MRESA_TAC set_edges_is_finite_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
2171 THEN MRESA_TAC  FINITE_SUBSET [`(E':(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`]
2172 THEN ABBREV_TAC`n=CARD (E':(real^3->bool)->bool)`
2173 THEN REPEAT(POP_ASSUM MP_TAC)
2174 THEN SPEC_TAC (`(E':(real^3->bool)->bool)`,`(E':(real^3->bool)->bool)`)
2175 THEN SPEC_TAC (`n:num`,`n:num`)
2176 THEN INDUCT_TAC
2177 THENL(*1*)[
2178 REPEAT STRIP_TAC 
2179 THEN MP_TAC(ISPECL[`E':(real^3->bool)->bool`]CARD_EQ_0)
2180 THEN RESA_TAC
2181 THEN EXISTS_TAC`&1 / &2`
2182 THEN REWRITE_TAC[REAL_ARITH`&0< &1/ &2`;REAL_ARITH`&1 / &2 <= &1`]
2183 THEN ASM_SET_TAC[];(*1*)
2184
2185 REPEAT GEN_TAC
2186 THEN POP_ASSUM MP_TAC
2187 THEN DISCH_THEN (LABEL_TAC "A")
2188 THEN REPEAT STRIP_TAC
2189 THEN MP_TAC(ISPEC`(E':(real^3->bool)->bool)` CHOOSE_SUBSET)
2190 THEN RESA_TAC
2191 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`n:num `th))
2192 THEN REWRITE_TAC[ARITH_RULE `n:num <= SUC n`; HAS_SIZE]
2193 THEN STRIP_TAC
2194 THEN MP_TAC(SET_RULE` t SUBSET E' /\ E' SUBSET E ==> (t:(real^3->bool)->bool) SUBSET E`)
2195 THEN RESA_TAC
2196 THEN REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`(t:(real^3->bool)->bool)`th))
2197 THEN RESA_TAC
2198 THEN POP_ASSUM MP_TAC
2199 THEN DISCH_THEN(LABEL_TAC"YEU")
2200 THEN SUBGOAL_THEN `~((E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)= {})` ASSUME_TAC
2201 THENL(*2*)[
2202 STRIP_TAC
2203 THEN MP_TAC(SET_RULE`(E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)={} /\ t SUBSET E' ==>  t= E'`)
2204 THEN RESA_TAC
2205 THEN FIND_ASSUM MP_TAC`CARD (t:(real^3->bool)->bool)=n`
2206 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
2207 THEN ASM_REWRITE_TAC[]
2208 THEN ARITH_TAC;(*2*)
2209 SUBGOAL_THEN`?e. e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)` ASSUME_TAC
2210 THENL(*3*)[
2211 ASM_SET_TAC[];(*3*)
2212
2213 POP_ASSUM MP_TAC
2214 THEN STRIP_TAC
2215 THEN MP_TAC(SET_RULE`e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)/\
2216 (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'`)
2217 THEN RESA_TAC
2218 THEN MP_TAC(ISPECL [`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`(E':(real^3->bool)->bool)`] FINITE_SUBSET)
2219 THEN RESA_TAC
2220 THEN ASSUME_TAC(SET_RULE`e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
2221 THEN MP_TAC(ISPECL[`e:real^3->bool`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;]CARD_DELETE)
2222 THEN RESA_TAC
2223 THEN MP_TAC(SET_RULE `e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool) 
2224 ==> ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e PSUBSET {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
2225 THEN RESA_TAC
2226 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)
2227 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
2228 THEN FIND_ASSUM MP_TAC`FINITE ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`
2229 THEN DISCH_TAC
2230 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
2231 THEN DISCH_TAC
2232 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))
2233 /\ 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
2234 <=>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))`)
2235 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
2236 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
2237 THEN REWRITE_TAC[ARITH_RULE`A=A`; ]
2238 THEN MP_TAC(SET_RULE`~(e IN t)==>({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e=t`)
2239 THEN RESA_TAC
2240 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
2241 THEN FIND_ASSUM MP_TAC`(CARD (E':(real^3->bool)->bool)=SUC n)`
2242 THEN REWRITE_TAC[ARITH_RULE`SUC n=(n:num) +1`]
2243 THEN DISCH_TAC
2244 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
2245 THEN DISCH_TAC
2246 THEN MP_TAC(ISPECL[`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`E':(real^3->bool)->bool`]CARD_SUBSET_EQ)
2247 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
2248 THEN RESA_TAC
2249 THEN POP_ASSUM MP_TAC
2250 THEN DISCH_THEN(LABEL_TAC"MA")
2251 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
2252 THEN RESA_TAC
2253 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`]
2254 THEN POP_ASSUM MP_TAC
2255 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
2256 THEN POP_ASSUM MP_TAC
2257 THEN RESA_TAC
2258 THEN STRIP_TAC
2259 THEN POP_ASSUM MP_TAC
2260 THEN DISCH_THEN(LABEL_TAC"BE")
2261 THEN EXISTS_TAC` min (h:real) (t1:real)`
2262 THEN STRIP_TAC
2263 THENL(*4*)[
2264 ASM_TAC
2265 THEN REAL_ARITH_TAC;(*4*)
2266
2267 STRIP_TAC
2268 THENL(*5*)[
2269 ASM_TAC
2270 THEN REAL_ARITH_TAC;(*5*)
2271 REPEAT STRIP_TAC
2272 THEN REMOVE_THEN "MA" MP_TAC
2273 THEN DISCH_TAC
2274 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
2275 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION; INTER;]
2276 THEN GEN_TAC
2277 THEN EQ_TAC
2278 THENL(*6*)[
2279 ASM_REWRITE_TAC[IN_SING]
2280 THEN MP_TAC(REAL_ARITH`s< min h t1==> s<h /\ s<t1`)
2281 THEN RESA_TAC
2282 THEN STRIP_TAC
2283 THENL(*7*)[
2284
2285
2286 POP_ASSUM MP_TAC
2287 THEN ASM_REWRITE_TAC[]
2288 THEN REMOVE_THEN "BE"(fun th-> MRESA1_TAC th `s:real`)
2289 THEN ASM_SET_TAC[];
2290
2291 POP_ASSUM MP_TAC
2292 THEN ASM_REWRITE_TAC[]
2293 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th `s:real`)
2294 THEN ASM_SET_TAC[]];
2295 SET_TAC[]]]]]]]);;
2296
2297
2298
2299
2300
2301
2302 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.
2303 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2304 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
2305 /\ sigma_fan x V E u w = v
2306 ==>
2307 ?h:real. &0<h /\ h<= &1
2308 /\ (!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}={})`,
2309
2310 REPEAT STRIP_TAC
2311 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)
2312 THEN RESA_TAC
2313 THEN POP_ASSUM MP_TAC
2314 THEN REWRITE_TAC[SET_RULE`A SUBSET A`]
2315 THEN RESA_TAC
2316 THEN EXISTS_TAC`h:real`
2317 THEN ASM_REWRITE_TAC[]
2318 THEN ASM_SET_TAC[]);;
2319
2320 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.
2321 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2322 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
2323 /\ sigma_fan x V E u w = v
2324 ==>
2325     ?h:real. &0<h /\ h<= &1
2326 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} SUBSET yfan(x,V,E))`,
2327 REPEAT STRIP_TAC
2328 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)
2329 THEN RESA_TAC
2330 THEN POP_ASSUM MP_TAC
2331 THEN REWRITE_TAC[SET_RULE`A SUBSET A`;yfan;xfan]
2332 THEN RESA_TAC
2333 THEN EXISTS_TAC`h:real`
2334 THEN ASM_REWRITE_TAC[]
2335 THEN ASM_SET_TAC[]);;
2336
2337
2338
2339 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.
2340 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2341 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
2342 /\  &0<=t /\ t<= &1
2343 ==> ~ collinear {x,v,(&1-t)%u+ t % w}`,
2344
2345 REPEAT STRIP_TAC
2346 THEN POP_ASSUM MP_TAC
2347 THEN REWRITE_TAC[]
2348 THEN MP_TAC(REAL_ARITH`&0<=t /\ t<= &1 ==> t=  &0 \/ t= &1 \/ (&0<t /\ t< &1)`)
2349 THEN RESA_TAC
2350 THENL[
2351 REDUCE_ARITH_TAC THEN REDUCE_VECTOR_TAC
2352 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2353 ` (v:real^3)`] ;
2354
2355 REWRITE_TAC[REAL_ARITH`&1- &1= &0`] THEN REDUCE_VECTOR_TAC
2356 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`]
2357 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`]
2358 THEN POP_ASSUM MATCH_MP_TAC
2359 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
2360 THEN ASM_REWRITE_TAC[];
2361
2362 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2363 ` (v:real^3)`] 
2364 THEN MRESA_TAC collinear1_fan [`x:real^3`;`v:real^3`;`(&1-t)% u+t% w:real^3`]
2365 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2366 THEN ASM_REWRITE_TAC[]
2367 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`]
2368 THEN POP_ASSUM MP_TAC
2369 THEN MATCH_MP_TAC MONO_NOT
2370 THEN REWRITE_TAC[aff; AFFINE_HULL_2; IN_ELIM_THM; coplanar]
2371 THEN STRIP_TAC
2372 THEN EXISTS_TAC`x:real^3`
2373 THEN EXISTS_TAC`v:real^3`
2374 THEN EXISTS_TAC`u:real^3`
2375 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
2376 THENL[
2377 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
2378 THEN EXISTS_TAC`&1`
2379 THEN EXISTS_TAC`&0`
2380 THEN EXISTS_TAC`&0`
2381 THEN REDUCE_ARITH_TAC
2382 THEN VECTOR_ARITH_TAC;
2383
2384 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
2385 THENL[
2386 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
2387 THEN EXISTS_TAC`&0`
2388 THEN EXISTS_TAC`&1`
2389 THEN EXISTS_TAC`&0`
2390 THEN REDUCE_ARITH_TAC
2391 THEN VECTOR_ARITH_TAC;
2392
2393 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
2394 THENL[ 
2395 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
2396 THEN EXISTS_TAC`&0`
2397 THEN EXISTS_TAC`&0`
2398 THEN EXISTS_TAC`&1`
2399 THEN REDUCE_ARITH_TAC
2400 THEN VECTOR_ARITH_TAC;
2401
2402 SUBGOAL_THEN`(w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
2403 THENL[
2404 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
2405 THEN REMOVE_ASSUM_TAC
2406 THEN REMOVE_ASSUM_TAC
2407 THEN REMOVE_ASSUM_TAC
2408 THEN POP_ASSUM MP_TAC
2409 THEN MP_TAC(REAL_ARITH`&0<t:real==> ~(t= &0)`)
2410 THEN RESA_TAC
2411 THEN MP_TAC(ISPEC`(t:real)`REAL_MUL_LINV)
2412 THEN RESA_TAC
2413 THEN ASM_REWRITE_TAC[]
2414 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t) % u + t % w = u' % x + v' % v
2415 <=>t % w = u' % x + v' % v-(&1 - t) % u :real^3`]
2416 THEN STRIP_TAC
2417 THEN MP_TAC(SET_RULE`
2418 t % w = u' % x + v' % v-(&1 - t) % u 
2419 ==> (inv (t))%(t % w  ) = (inv (t))%(u' % x + v' % v-(&1 - t) % u ):real^3`)
2420 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2421 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`]
2422 THEN REDUCE_VECTOR_TAC
2423 THEN STRIP_TAC
2424 THEN EXISTS_TAC`(inv t * u'):real`
2425 THEN EXISTS_TAC`(inv t * v'):real`
2426 THEN EXISTS_TAC`(&1-inv t):real`
2427 THEN ASM_REWRITE_TAC[REAL_ARITH`A*B+A*C+D-E=A*(B+C)+D-E`]
2428 THEN ASM_TAC
2429 THEN REAL_ARITH_TAC;
2430
2431 ASM_TAC
2432 THEN SET_TAC[]]]]]]);;
2433
2434
2435
2436
2437 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.
2438 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2439 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
2440 /\  &0<t /\ t< &1
2441 ==> ~ collinear {x,v,(&1-t)%u+ t % w}`,
2442 REPEAT STRIP_TAC
2443 THEN POP_ASSUM MP_TAC
2444 THEN REWRITE_TAC[]
2445 THEN MP_TAC(REAL_ARITH`&0 <t /\ t < &1==> &0<= t /\ t <= &1`)
2446 THEN RESA_TAC
2447 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`]
2448 );;
2449
2450
2451 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 .
2452 FAN(x,V,E)/\ v IN V  /\ CARD (set_of_edge v V E) >1
2453 ==>
2454 (?(u:real^3). (u IN (set_of_edge v V E)) /\
2455 (!(w:real^3). (w IN (set_of_edge v V E)) ==> azim x v u1 u <= azim x v u1 w))`,
2456 (let lemma = prove
2457    (`!X:real->bool. 
2458           FINITE X /\ ~(X = {}) 
2459           ==> ?a. a IN X /\ !x. x IN X ==> a <= x`,
2460     MESON_TAC[INF_FINITE]) in
2461 MP_TAC(lemma) 
2462 THEN DISCH_THEN(LABEL_TAC "a") 
2463 THEN REPEAT GEN_TAC THEN REWRITE_TAC[FAN;fan1] 
2464 THEN STRIP_TAC 
2465 THEN MRESA_TAC remark_finite_fan1[`(v:real^3)` ;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2466 THEN DISJ_CASES_TAC(SET_RULE`((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool))={})\/
2467  ~((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) ={})`)
2468 THENL[
2469 FIND_ASSUM MP_TAC `CARD ((set_of_edge v V E):real^3->bool) > 1`
2470 THEN POP_ASSUM (fun th->REWRITE_TAC[th;CARD_CLAUSES])
2471 THEN ARITH_TAC;
2472 SUBGOAL_THEN`~(IMAGE (azim x v u1) ((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) )={})` ASSUME_TAC
2473 THENL[
2474 REWRITE_TAC[IMAGE_EQ_EMPTY] THEN ASM_MESON_TAC[];
2475
2476 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
2477 THENL[ASM_MESON_TAC[FINITE_IMAGE];
2478
2479 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]) 
2480 THEN EXISTS_TAC`x':real^3`
2481   THEN ASM_REWRITE_TAC[] 
2482 THEN ASM_MESON_TAC[]]]]));;
2483
2484
2485
2486 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.
2487 FAN(x,V,E)/\ v IN V /\ ~coplanar{x,v,u1,w1} 
2488 /\ CARD (set_of_edge v V E) >1
2489 /\ fan80(x,V,E) 
2490 ==>  ?u:real^3. {v,u} IN E /\ &0< azim x v u1 (u:real^3)/\ azim x v u1 (u:real^3) <pi  `,
2491 REWRITE_TAC[fan80]
2492 THEN REPEAT STRIP_TAC
2493 THEN POP_ASSUM MP_TAC
2494 THEN DISCH_THEN(LABEL_TAC "BE")
2495 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`v:real^3`;`u1:real^3`;`w1:real^3`]
2496 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`]
2497 THEN POP_ASSUM MP_TAC
2498 THEN DISCH_THEN(LABEL_TAC "YEU")
2499 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
2500 THEN POP_ASSUM MP_TAC
2501 THEN RESA_TAC
2502 THEN MRESA_TAC SUR_SIGMA_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3) `;`(u:real^3)`]
2503 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
2504 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 `)
2505 THENL[
2506 REMOVE_THEN "BE" (fun th-> MRESA_TAC th [`v:real^3`;`w:real^3`])
2507 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`)
2508 THEN RESA_TAC
2509 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`v:real^3`;`u1:real^3`;`w:real^3`;`u:real^3`]
2510 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
2511 ==> azim x v u1 w < azim x v u1 u`)
2512 THEN POP_ASSUM (fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2513 THEN RESA_TAC
2514 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `w:real^3`)
2515 THEN POP_ASSUM MP_TAC
2516 THEN POP_ASSUM MP_TAC
2517 THEN REAL_ARITH_TAC;
2518
2519 ASSUME_TAC(ISPECL[`(x:real^3)`;`(v:real^3)`;`(u1:real^3)`;`u:real^3`]azim)
2520 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)  `)
2521 THEN POP_ASSUM (fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[])
2522 THEN STRIP_TAC
2523 THENL[
2524 EXISTS_TAC`sigma_fan x V E v (u:real^3)`
2525 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {u:real^3})\/  ~(set_of_edge v V E = {u})`)
2526 THENL[
2527
2528 MRESA_TAC CARD_SING[`u:real^3`; `(set_of_edge v V E):real^3->bool`]
2529 THEN FIND_ASSUM MP_TAC `CARD ((set_of_edge v V E):real^3->bool) >1`
2530 THEN POP_ASSUM MP_TAC
2531 THEN POP_ASSUM (fun TH-> REWRITE_TAC[TH])
2532 THEN ARITH_TAC;
2533
2534 MRESA_TAC SIGMA_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3) `;`(u:real^3)`]
2535 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`]
2536 THEN POP_ASSUM MP_TAC
2537 THEN RESA_TAC
2538 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `sigma_fan x V E v (u:real^3)`)
2539 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)`]
2540 THEN REDUCE_ARITH_TAC
2541 THEN REMOVE_THEN "BE" (fun th-> MRESA_TAC th [`v:real^3`;`(u:real^3)`])];
2542
2543 EXISTS_TAC`(u:real^3)`
2544 THEN ASM_REWRITE_TAC[]]]);;
2545
2546
2547
2548
2549
2550
2551
2552 let JBDNJJB=prove(`!u:real^3 v:real^3 w:real^3.
2553 ~collinear {vec 0, u, v} /\ ~collinear {vec 0, u, w}
2554 ==>
2555 ?t:real. &0< t /\ sin(azim (vec 0) u v w)=t *(u cross v) dot w`,
2556
2557 REPEAT STRIP_TAC
2558 THEN MRESA_TAC th3[`((vec 0):real^3)`;` (u:real^3)`;` (v:real^3)`]
2559 THEN MRESA_TAC properties_coordinate[`((vec 0):real^3)`;` (u:real^3)`;` (v:real^3)`]
2560 THEN MRESA_TAC azim[`((vec 0):real^3)`;` (u:real^3)`;` (v:real^3)`;`(w:real^3)`]
2561 THEN POP_ASSUM (fun th->MRESA_TAC th [`e1_fan ((vec 0):real^3) (u:real^3) (v:real^3)`;`e2_fan ((vec 0):real^3) (u:real^3) (v:real^3)`;`e3_fan ((vec 0):real^3) (u:real^3) (v:real^3)`])
2562 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2563 THEN DISCH_THEN (LABEL_TAC"YEU EM")
2564 THEN DISCH_TAC THEN DISCH_TAC
2565 THEN MRESA_TAC sincos1_of_u_fan[`((vec 0):real^3)`;` (u:real^3)`;` (v:real^3)`;`r1:real`; `psi:real`; `h1:real`]
2566 THEN REMOVE_THEN "YEU EM" MP_TAC
2567 THEN ASM_REWRITE_TAC[COS_ADD;SIN_ADD;]
2568 THEN REDUCE_ARITH_TAC
2569 THEN REDUCE_VECTOR_TAC
2570 THEN STRIP_TAC
2571 THEN MP_TAC(SET_RULE`w =
2572       (r2 * cos (azim (vec 0) u v w)) % e1_fan (vec 0) u v +
2573       (r2 * sin (azim (vec 0) u v w)) % e2_fan (vec 0) u v +
2574       h2 % u ==>
2575 (u cross v) dot w =
2576 (u cross v) dot ((r2 * cos (azim (vec 0) u v w)) % e1_fan (vec 0) u v +
2577       (r2 * sin (azim (vec 0) u v w)) % e2_fan (vec 0) u v +
2578       h2 % u)`)
2579 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2580 THEN REWRITE_TAC[DOT_LADD; DOT_RADD; DOT_LMUL; DOT_RMUL;DOT_CROSS_SELF; e2_fan;e1_fan;e3_fan;
2581 VECTOR_ARITH`A- vec 0= A`;CROSS_LADD; CROSS_RADD; CROSS_LMUL; CROSS_RMUL;CROSS_REFL;CROSS_RNEG;CROSS_LNEG;]
2582 THEN REDUCE_ARITH_TAC
2583 THEN REWRITE_TAC[NORM_MUL;REAL_INV_MUL; REAL_ABS_INV;REAL_INV_INV;REAL_ABS_NORM;DOT_SQUARE_NORM
2584 ;REAL_ARITH`(r2 * sin (azim (vec 0) u v w)) *
2585  (norm u * inv (norm (u cross v))) *
2586  inv (norm u) *
2587  norm (u cross v) pow 2 =(r2* norm(u cross v)) * sin (azim (vec 0) u v w) *
2588  ( inv (norm u) * norm u)*
2589 ( inv (norm (u cross v))* norm (u cross (v:real^3)))`
2590 ]
2591 THEN MP_TAC(ISPECL[`u:real^3`;`(vec 0) :real^3`]imp_norm_not_zero_fan)
2592 THEN REDUCE_VECTOR_TAC
2593 THEN RESA_TAC
2594 THEN MP_TAC(ISPEC`(norm(u:real^3))`REAL_MUL_LINV)
2595 THEN RESA_TAC
2596 THEN ASSUME_TAC(ISPEC`u:real^3`NORM_POS_LE)
2597 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u:real^3)) /\ &0 <= norm(u:real^3)==> &0 <norm(u:real^3)`)
2598 THEN RESA_TAC
2599 THEN SUBGOAL_THEN`~(u cross v = vec 0)` ASSUME_TAC
2600 THENL[ASM_REWRITE_TAC[CROSS_EQ_0];
2601
2602 MP_TAC(ISPECL[`u cross v :real^3`;`(vec 0) :real^3`]imp_norm_not_zero_fan)
2603 THEN REDUCE_VECTOR_TAC
2604 THEN RESA_TAC
2605 THEN MP_TAC(ISPEC`(norm(u cross v:real^3))`REAL_MUL_LINV)
2606 THEN RESA_TAC
2607 THEN ASSUME_TAC(ISPEC`u cross v:real^3`NORM_POS_LE)
2608 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u cross v:real^3)) /\ &0 <= norm(u cross v:real^3)==> &0 <norm(u cross v:real^3)`)
2609 THEN RESA_TAC
2610 THEN MRESA_TAC REAL_LT_MUL[`r2:real`;`norm(u cross v:real^3)`]
2611 THEN MP_TAC(REAL_ARITH`&0<(r2:real)*norm(u cross v:real^3)==> ~((r2:real)*norm(u cross v:real^3)= &0)`)
2612 THEN REDUCE_VECTOR_TAC
2613 THEN RESA_TAC
2614 THEN MP_TAC(ISPEC`(r2 * norm(u cross v:real^3))`REAL_MUL_LINV)
2615 THEN RESA_TAC
2616 THEN MP_TAC(ISPEC`(r2 * norm(u cross v:real^3))`REAL_LT_INV)
2617 THEN RESA_TAC
2618 THEN REDUCE_ARITH_TAC
2619 THEN STRIP_TAC
2620 THEN MP_TAC(SET_RULE`(u cross v) dot w = (r2 * norm (u cross v)) * sin (azim (vec 0) u v w) ==>
2621 inv (r2 * norm (u cross v))*(r2 * norm (u cross v)) * sin (azim (vec 0) u v w)= inv (r2 * norm (u cross v)) *((u cross v) dot w)`)
2622 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2623 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (r2 * norm (u cross v)) * (r2 * norm (u cross v)) *
2624  sin (azim (vec 0) u v w)=(inv (r2 * norm (u cross v)) * (r2 * norm (u cross v)))*
2625  sin (azim (vec 0) u v w)`]
2626 THEN REDUCE_ARITH_TAC
2627 THEN STRIP_TAC
2628 THEN EXISTS_TAC`inv (r2 * norm (u cross v)):real`
2629 THEN ASM_REWRITE_TAC[]]);;
2630
2631
2632 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.
2633 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2634 /\ fan80(x,V,E)
2635 /\ sigma_fan x V E u w = v
2636 /\ &0<a /\ a<= &1
2637 ==> independent {v - x, u - x, ((&1 - a) % u + a % w) - x}`,
2638
2639
2640 REPEAT STRIP_TAC
2641 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2642 THEN REWRITE_TAC[fan80]
2643 THEN DISCH_TAC
2644 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"))
2645 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`]
2646 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a= &0)`)
2647 THEN RESA_TAC
2648 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2649 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2650 ` (u:real^3)`] 
2651 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2652 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2653 THEN POP_ASSUM MP_TAC
2654 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}`)
2655 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`]
2656 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2657 THEN REMOVE_ASSUM_TAC
2658 THEN DISCH_TAC
2659 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`]);;
2660
2661
2662 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.
2663 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2664 /\ fan80(x,V,E)
2665 /\ sigma_fan x V E u w = v
2666 /\ &0<a /\ a< &1
2667 ==> ?t1:real t2:real t3:real. 
2668 u1-x =t1 % (v-x)+t2 % ((&1 - a) % u + a % w - x)+t3 %(u-x)`,
2669 REPEAT STRIP_TAC
2670 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2671 THEN REWRITE_TAC[fan80]
2672 THEN DISCH_TAC
2673 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"))
2674 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`]
2675 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a= &0)`)
2676 THEN RESA_TAC
2677 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2678 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2679 ` (u:real^3)`] 
2680 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2681 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2682 THEN POP_ASSUM MP_TAC
2683 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}`)
2684 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`]
2685 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2686 THEN REMOVE_ASSUM_TAC
2687 THEN DISCH_TAC
2688 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`]
2689 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`]
2690 THEN POP_ASSUM MP_TAC
2691 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={D,A,B,C}`]
2692 THEN RESA_TAC
2693 THEN POP_ASSUM(fun th-> MP_TAC(th) THEN ASSUME_TAC(th))
2694 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,D}={D,A,B}`] 
2695 THEN DISCH_TAC
2696 THEN MRESA_TAC th3[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`]
2697 THEN MRESA_TAC th3[ `((&1 - a) % u + a % w) - x:real^3`;`v - x:real^3`; `u - x:real^3`;]
2698 THEN MP_TAC(ISPECL [`(:real^3)`; `{v - x, u - x, ((&1 - a) % u + a % w) - x:real^3}`] CARD_EQ_DIM) THEN
2699   ASM_SIMP_TAC[ORTHONORMAL_IMP_INDEPENDENT; SUBSET_UNIV] THEN
2700   REWRITE_TAC[DIM_UNIV; DIMINDEX_3; HAS_SIZE; FINITE_INSERT; FINITE_EMPTY] THEN
2701   SIMP_TAC[CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY; IN_INSERT;] 
2702 THEN  ASM_REWRITE_TAC[NOT_IN_EMPTY; ARITH;SUBSET] 
2703 THEN DISCH_TAC
2704 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `u1-x:real^3`[IN_UNIV;SPAN_3;IN_ELIM_THM])
2705 THEN EXISTS_TAC`u':real`        
2706 THEN EXISTS_TAC`w':real`
2707 THEN EXISTS_TAC`v':real`
2708 THEN VECTOR_ARITH_TAC);;
2709
2710
2711
2712 let IMP_NORM_FAN=prove(`!va:real^3 vb:real^3. ~(va = vb)
2713 ==> ~(norm (va-vb) = &0) /\ &0 <= norm (va-vb) /\ &0 < norm (va-vb) /\ &0 <= inv (norm (va-vb)) 
2714 /\ &0 < inv (norm (va-vb)) /\ inv (norm (va-vb)) * norm (va-vb) = &1`,
2715 REPEAT GEN_TAC
2716 THEN DISCH_TAC
2717 THEN MRESA_TAC imp_norm_not_zero_fan[`va:real^3`;`vb:real^3`]
2718 THEN ASSUME_TAC(ISPEC`va-vb:real^3`NORM_POS_LE)
2719 THEN MP_TAC(REAL_ARITH`~(norm(va-vb:real^3)= &0) /\ &0 <= norm(va-vb:real^3)==> &0 <norm(va-vb:real^3)`)
2720 THEN RESA_TAC
2721 THEN MRESA1_TAC REAL_LE_INV `norm(va-vb:real^3)`
2722 THEN MRESA1_TAC REAL_LT_INV `norm(va-vb:real^3)`
2723 THEN MRESA1_TAC REAL_MUL_LINV `norm(va-vb:real^3)`
2724 THEN ASM_REWRITE_TAC[]);;
2725
2726
2727
2728
2729 let cross_dot_fully_surrounded_fan=prove(`!x:real^3 v1:real^3 u1:real^3 v:real^3.
2730 ~collinear{x,v1,u1}
2731 /\ ~collinear{x,v1,v}
2732 /\ &0< azim x v1 v u1
2733 /\  azim x v1 v u1 < pi
2734 ==> &0 < ((v1 - x) cross (v - x)) dot (u1 - x)`,
2735
2736 REPEAT STRIP_TAC
2737 THEN MRESA1_TAC SIN_POS_PI`azim x v1 v (u1:real^3)`
2738 THEN POP_ASSUM MP_TAC
2739 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`v1:real^3`;` v:real^3`;`u1:real^3`]
2740 THEN POP_ASSUM MP_TAC
2741 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
2742 THEN DISCH_TAC
2743 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2744 THEN MRESA_TAC JBDNJJB[`(v1-x):real^3`;`v-x:real^3`;`u1-x:real^3`]
2745 THEN POP_ASSUM MP_TAC
2746 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
2747 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
2748 THEN RESA_TAC
2749 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`]);;
2750
2751
2752 let cross_dot_fully_surrounded_ge_fan=prove(`!x:real^3 v1:real^3 u1:real^3 v:real^3.
2753 ~collinear{x,v1,u1}
2754 /\ ~collinear{x,v1,v}
2755 /\ &0<= azim x v1 v u1
2756 /\  azim x v1 v u1 <= pi
2757 ==> &0 <= ((v1 - x) cross (v - x)) dot (u1 - x)`,
2758 REPEAT STRIP_TAC
2759 THEN MRESA1_TAC SIN_POS_PI_LE`azim x v1 v (u1:real^3)`
2760 THEN POP_ASSUM MP_TAC
2761 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`v1:real^3`;` v:real^3`;`u1:real^3`]
2762 THEN POP_ASSUM MP_TAC
2763 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
2764 THEN DISCH_TAC
2765 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2766 THEN MRESA_TAC JBDNJJB[`(v1-x):real^3`;`v-x:real^3`;`u1-x:real^3`]
2767 THEN POP_ASSUM MP_TAC
2768 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
2769 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
2770 THEN RESA_TAC
2771 THEN MRESAL_TAC REAL_LE_LMUL_EQ [` &0:real `;`(((v1 - x) cross (v - x)) dot ((u1 - x):real^3)):real`;`t:real`][REAL_ARITH`a * &0 = &0`]);;
2772
2773
2774 let AFF_LT_2_1 = prove
2775  (`!x v w.
2776         DISJOINT {x,v} {w}
2777         ==> aff_lt {x,v} {w} =
2778              {y | ?t1 t2 t3.
2779                       t3 < &0 /\
2780                      t1 + t2 + t3 = &1 /\
2781                      y = t1 % x + t2 % v + t3 % w}`,
2782   AFF_TAC);;
2783
2784
2785
2786 let properties_of_collinear4_points_fan=prove(`!x:real^3  v:real^3 u:real^3 v1:real^3.
2787 ~collinear{x,v,u}
2788 /\ v1 IN aff_gt {x} {v,u}
2789 ==> ~collinear{x,v1,v}`,
2790 REPEAT STRIP_TAC
2791 THEN POP_ASSUM MP_TAC
2792 THEN REWRITE_TAC[]
2793 THEN POP_ASSUM MP_TAC
2794 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
2795 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
2796 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2797 THEN STRIP_TAC 
2798 THEN ASM_REWRITE_TAC[collinear1_fan;]
2799 THEN FIND_ASSUM MP_TAC`~(u IN aff {x, v:real^3})`
2800 THEN MATCH_MP_TAC MONO_NOT
2801 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
2802 THEN STRIP_TAC
2803 THEN POP_ASSUM MP_TAC
2804 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % u = u' % x + v' % v <=> t3 % u = (u'-t1) % x + (v'-t2) % v`;]
2805 THEN MP_TAC (REAL_ARITH`&0< t3==> ~(t3= &0)`) THEN RESA_TAC
2806 THEN MRESA1_TAC REAL_MUL_LINV `(t3:real)`
2807 THEN STRIP_TAC
2808 THEN MP_TAC(SET_RULE`t3 % u = (u'-t1) % x + (v'-t2) % v ==> (inv (t3)) % (t3) % ( u) = (inv (t3)) % ( (u'-t1) % x + (v'-t2) % v:real^3)`)
2809 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
2810 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`;VECTOR_ARITH`A%(B+C)=A%B+A%C`])
2811 THEN REDUCE_VECTOR_TAC
2812 THEN STRIP_TAC
2813 THEN EXISTS_TAC`inv t3 * ((u' - t1):real)`
2814 THEN EXISTS_TAC`inv t3 * ((v' - t2):real)`
2815 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3 * (u' - t1) + inv t3 * (v' - t2)=inv t3 *(t3+ (u'+v') -( t1+ t2+t3))`;REAL_ARITH`A+ &1- &1=A`]);;
2816
2817
2818
2819
2820 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.
2821 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2822 /\ sigma_fan x V E u w = v
2823 /\ &0<a /\ a< &1
2824 /\ fan80(x,V,E)
2825 /\ ~collinear{x,v1,u1}
2826 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2827 /\ &0< azim x v1 v u1
2828 /\  azim x v1 v u1 < pi
2829 ==> &0< ((v1 - x) cross (u1 - x)) dot
2830   ((&1 - a) % u + a % w-x)`,
2831
2832 REPEAT STRIP_TAC
2833 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`]
2834 THEN POP_ASSUM MATCH_MP_TAC
2835 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2836 THEN REWRITE_TAC[fan80]
2837 THEN DISCH_THEN(LABEL_TAC"yeu em")
2838 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2839 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2840 ` (u:real^3)`] 
2841 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"))
2842 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`]
2843 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
2844 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2845 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
2846 THEN FIND_ASSUM MP_TAC `(v1:real^3) IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
2847 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2848 THEN STRIP_TAC 
2849 THEN SUBGOAL_THEN`~collinear {x, v1, (&1 - a) % u + a % w:real^3}` ASSUME_TAC
2850 THENL[
2851 ASM_REWRITE_TAC[collinear1_fan;]
2852 THEN FIND_ASSUM MP_TAC`~((&1 - a) % u + a % w IN aff {x, v:real^3})`
2853 THEN MATCH_MP_TAC MONO_NOT
2854 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
2855 THEN STRIP_TAC
2856 THEN POP_ASSUM MP_TAC
2857 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
2858       u' % x + v' % ((&1 - a) % u + a % w)<=>
2859 (&1-(t1+t2+t3)) % x  + (v'-t3) % ((&1 - a) % u + a % w-x) =
2860       (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
2861 THEN REDUCE_VECTOR_TAC
2862 THEN DISJ_CASES_TAC(REAL_ARITH`v' - t3= &0 \/ ~(v' - (t3:real)= &0)`)
2863 THENL[
2864 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
2865 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
2866 THEN RESA_TAC
2867 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];
2868
2869 MRESA1_TAC REAL_MUL_LINV `(v'-t3:real)`
2870 THEN STRIP_TAC
2871 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))`)
2872 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
2873 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
2874 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w - x) = (inv (v' - t3) * t2) % (v - x)<=>
2875 (&1 - a) % u + a % w  = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
2876 THEN STRIP_TAC
2877 THEN EXISTS_TAC`&1-(inv (v' - t3) * (t2:real))`
2878 THEN EXISTS_TAC`(inv (v' - t3) * (t2:real))`
2879 THEN ASM_REWRITE_TAC[]
2880 THEN REAL_ARITH_TAC];
2881
2882 POP_ASSUM MP_TAC
2883 THEN POP_ASSUM MP_TAC
2884 THEN DISCH_THEN (LABEL_TAC"A")
2885 THEN DISCH_TAC
2886 THEN REMOVE_THEN "A" MP_TAC
2887 THEN ASM_REWRITE_TAC[]
2888 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`]
2889 THEN POP_ASSUM MP_TAC
2890 THEN DISCH_THEN (LABEL_TAC"B")
2891 THEN DISCH_TAC
2892 THEN SUBGOAL_THEN`azim x v1 v ((&1 - a) % u + a % w)= pi` ASSUME_TAC
2893 THENL[
2894 POP_ASSUM MP_TAC
2895 THEN MRESA_TAC th3[`(x:real^3)` ;`v1:real^3`;` (v:real^3)`]
2896 THEN MRESA_TAC AFF_LT_2_1[`x:real^3`;`v1:real^3`;`v:real^3`]
2897 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]
2898 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[VECTOR_ARITH`A=B+C+D <=> D=A-B-C:real^3`]
2899 THEN MP_TAC(REAL_ARITH`&0<t3==> ~(t3= &0)`)
2900 THEN RESA_TAC
2901 THEN MRESA1_TAC REAL_MUL_LINV `(t3:real)`
2902 THEN STRIP_TAC
2903 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)`)
2904 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
2905 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
2906 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w) = inv t3 % (v1 - t1 % x - t2 % v)
2907 <=> (&1 - a) % u + a % w = (-- inv t3 * t1) % x + (inv t3) % v1 +(-- (inv t3* t2)) % v`]
2908 THEN STRIP_TAC
2909 THEN EXISTS_TAC`(-- inv t3 * t1):real`
2910 THEN EXISTS_TAC`(inv t3):real`
2911 THEN EXISTS_TAC`(-- (inv t3 * t2)):real`
2912 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`]
2913 THEN MATCH_MP_TAC REAL_LT_MUL
2914 THEN ASM_REWRITE_TAC[]
2915 THEN MATCH_MP_TAC REAL_LT_INV
2916 THEN ASM_REWRITE_TAC[];
2917 REMOVE_THEN "B" MP_TAC
2918 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
2919 THEN REMOVE_ASSUM_TAC
2920 THEN MP_TAC(REAL_ARITH`azim x v1 v u1 < pi==> azim x v1 v u1 <= pi`)
2921 THEN RESA_TAC
2922 THEN ASM_REWRITE_TAC[]
2923 THEN FIND_ASSUM MP_TAC`azim x v1 v (u1:real^3) < pi`
2924 THEN FIND_ASSUM MP_TAC`&0< azim x v1 v (u1:real^3) `
2925 THEN REAL_ARITH_TAC]]);;
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936 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.
2937 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2938 /\ sigma_fan x V E u w = v
2939 /\ &0<a /\ a< &1
2940 /\ fan80(x,V,E)
2941 /\ ~collinear{x,v1,u1}
2942 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2943 /\ &0< azim x v1 v u1
2944 /\  azim x v1 v u1 < pi
2945 ==> ?t.  &0< t/\ t < &1
2946 /\( !h:real. &0< h/\ h<t
2947 ==> &0< ((v1 - x) cross (u1 - x)) dot (((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x))`,
2948
2949 REPEAT STRIP_TAC
2950 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
2951  ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
2952 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
2953 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
2954 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`]
2955 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))`)
2956 THENL[ 
2957 EXISTS_TAC`&1/ &2`
2958 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
2959 THEN REPEAT STRIP_TAC
2960 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
2961 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
2962 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`]
2963 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`]
2964 THEN POP_ASSUM MP_TAC
2965 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2966 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2967 THEN POP_ASSUM MP_TAC
2968 THEN REAL_ARITH_TAC;
2969 MRESA_TAC REAL_LT_MUL[`a:real`;`((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`]
2970 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)`)
2971 THEN RESA_TAC
2972 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
2973 THEN MRESA1_TAC REAL_LT_INV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
2974 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)`]
2975 THEN EXISTS_TAC `min ((inv(a *(((v1 - x) cross (u1 - x)) dot (w - u)))*(((v1 - x) cross (u1 - x)) dot va)) / &2 ) (&1/ &2)`
2976 THEN STRIP_TAC
2977 THENL[POP_ASSUM MP_TAC
2978 THEN REAL_ARITH_TAC;
2979 STRIP_TAC
2980 THENL[
2981  REAL_ARITH_TAC;
2982 REPEAT STRIP_TAC
2983 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)
2984 ==>
2985 h< ((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x)) dot va)) /  &2)`)
2986 THEN RESA_TAC
2987 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)`]
2988 THEN ASM_TAC
2989 THEN ABBREV_TAC`vb=a * (((v1 - x) cross (u1 - x)) dot (w - u))`
2990 THEN REPEAT DISCH_TAC
2991 THEN POP_ASSUM MP_TAC
2992 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * (((v1 - x) cross (u1 - x)) dot va)) / &2=
2993 (vb * inv vb) * (((v1 - x) cross (u1 - x)) dot va)/ &2`]
2994 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2995 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2996 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2997 THEN POP_ASSUM MP_TAC
2998 THEN REAL_ARITH_TAC]]]);;
2999
3000
3001 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.
3002 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
3003 /\ sigma_fan x V E u w = v
3004 /\ &0<a /\ a< &1
3005 /\ fan80(x,V,E)
3006 /\ ~collinear{x,v1,u1}
3007 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
3008 /\ &0< azim x v1 v u1
3009 /\  azim x v1 v u1 < pi
3010 ==> &0 < (((&1 - a) % u + a % w - x) cross (v - x)) dot (u1 - x)`,
3011
3012 REPEAT STRIP_TAC
3013 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
3014 THEN REWRITE_TAC[fan80]
3015 THEN DISCH_THEN(LABEL_TAC"yeu em")
3016 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
3017 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
3018 ` (u:real^3)`] 
3019 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"))
3020 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`]
3021 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
3022 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
3023 THEN MRESA1_TAC SIN_POS_PI`azim x v1 v (u1:real^3)`
3024 THEN POP_ASSUM MP_TAC
3025 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`v1:real^3`;` v:real^3`;`u1:real^3`]
3026 THEN POP_ASSUM MP_TAC
3027 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
3028 THEN DISCH_TAC
3029 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
3030 THEN MRESA_TAC JBDNJJB[`(v1-x):real^3`;`v-x:real^3`;`u1-x:real^3`]
3031 THEN POP_ASSUM MP_TAC
3032 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
3033 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
3034 THEN RESA_TAC
3035 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`]
3036 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3037 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
3038 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
3039 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
3040 THEN STRIP_TAC 
3041 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)`])
3042 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
3043 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
3044 THEN DISCH_TAC
3045 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)`]
3046 THEN REWRITE_TAC[CROSS_LADD; CROSS_RADD; CROSS_LMUL; CROSS_RMUL;CROSS_REFL;CROSS_RNEG;CROSS_LNEG]
3047 THEN REDUCE_VECTOR_TAC
3048 THEN REWRITE_TAC[GSYM CROSS_LMUL;GSYM CROSS_LADD;DOT_LMUL]
3049 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`]);;
3050
3051
3052
3053 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.
3054 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
3055 /\ sigma_fan x V E u w = v
3056 /\ &0<a /\ a< &1
3057 /\ fan80(x,V,E)
3058 /\ ~collinear{x,v1,u1}
3059 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
3060 /\ &0< azim x v1 v u1
3061 /\  azim x v1 v u1 < pi
3062 ==>
3063 ?t:real.  &0< t/\ t < &1
3064 /\ (!h:real. &0<h /\ h< t 
3065 ==> &0 <
3066 ((((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x) cross (v - x)) dot (u1 - x))`,
3067
3068 REPEAT STRIP_TAC
3069 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
3070  ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
3071 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
3072 THEN REWRITE_TAC[CROSS_LADD;CROSS_LMUL;DOT_LADD;DOT_LMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
3073 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`]
3074 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))`)
3075 THENL[ 
3076 EXISTS_TAC`&1/ &2`
3077 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
3078 THEN REPEAT STRIP_TAC
3079 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
3080 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
3081 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`]
3082 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`]
3083 THEN POP_ASSUM MP_TAC
3084 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3085 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3086 THEN POP_ASSUM MP_TAC
3087 THEN REAL_ARITH_TAC;
3088 MRESA_TAC REAL_LT_MUL[`a:real`;`((w - u) cross (v - x:real^3)) dot (u1- x:real^3)`]
3089 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)`)
3090 THEN RESA_TAC
3091 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
3092 THEN MRESA1_TAC REAL_LT_INV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
3093 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))`]
3094 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)`
3095 THEN STRIP_TAC
3096 THENL[POP_ASSUM MP_TAC
3097 THEN REAL_ARITH_TAC;
3098 STRIP_TAC
3099 THENL[
3100  REAL_ARITH_TAC;
3101 REPEAT STRIP_TAC
3102 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)
3103 ==>
3104 h< ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 )`)
3105 THEN RESA_TAC
3106 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 )`]
3107 THEN ASM_TAC
3108 THEN ABBREV_TAC`vb=a * (((w - u) cross (v - x:real^3)) dot (u1- x))`
3109 THEN REPEAT DISCH_TAC
3110 THEN POP_ASSUM MP_TAC
3111 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * ((va cross (v - x)) dot (u1 - x))) / &2=
3112 (vb * inv vb) * ((va cross (v - x)) dot (u1 - x))/ &2`]
3113 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3114 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3115 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3116 THEN POP_ASSUM MP_TAC
3117 THEN REAL_ARITH_TAC]]]);;
3118
3119
3120
3121
3122
3123 let properties_of_coplanar=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3124 ~collinear{x,v,u}
3125 /\ v1 IN aff_gt {x} {v,u}
3126 ==> coplanar{x,v1,v,u}`,
3127 REPEAT STRIP_TAC
3128 THEN REWRITE_TAC[coplanar]
3129 THEN POP_ASSUM MP_TAC
3130 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
3131 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
3132 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
3133 THEN STRIP_TAC
3134 THEN EXISTS_TAC`x:real^3` 
3135 THEN EXISTS_TAC`v:real^3`
3136 THEN EXISTS_TAC`u:real^3`
3137 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
3138 THENL[REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
3139 THEN EXISTS_TAC`&1`
3140 THEN EXISTS_TAC`&0`
3141 THEN EXISTS_TAC`&0`
3142 THEN REDUCE_ARITH_TAC
3143 THEN VECTOR_ARITH_TAC;
3144 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
3145 THENL[ REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
3146 THEN EXISTS_TAC`&0`
3147 THEN EXISTS_TAC`&1`
3148 THEN EXISTS_TAC`&0`
3149 THEN REDUCE_ARITH_TAC
3150 THEN VECTOR_ARITH_TAC;
3151 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
3152 THENL[
3153 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
3154 THEN EXISTS_TAC`&0`
3155 THEN EXISTS_TAC`&0`
3156 THEN EXISTS_TAC`&1`
3157 THEN REDUCE_ARITH_TAC
3158 THEN VECTOR_ARITH_TAC;
3159 SUBGOAL_THEN`(v1:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
3160 THENL[
3161 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
3162 THEN EXISTS_TAC`t1:real`
3163 THEN EXISTS_TAC`t2:real`
3164 THEN EXISTS_TAC`t3:real`
3165 THEN ASM_REWRITE_TAC[];
3166 ASM_TAC
3167 THEN SET_TAC[]]]]]);;
3168
3169
3170 let coplanar_is_cross_fan=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3171 ~collinear{x,v,u}
3172 /\ v1 IN aff_gt {x} {v,u}
3173 ==> ((v-x) cross (u-x)) dot (v1-x)= &0`,
3174 REPEAT STRIP_TAC
3175 THEN MRESA_TAC properties_of_coplanar[`x:real^3`;`v:real^3`;`u:real^3`;`v1:real^3`]
3176 THEN ONCE_REWRITE_TAC[DOT_SYM;]
3177 THEN REWRITE_TAC[DOT_CROSS_DET]
3178 THEN ONCE_REWRITE_TAC[GSYM COPLANAR_DET_EQ_0]
3179 THEN ASM_REWRITE_TAC[]);;
3180
3181
3182 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.
3183 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
3184 /\ sigma_fan x V E u w = v
3185 /\ &0<a /\ a< &1
3186 /\ fan80(x,V,E)
3187 /\ ~collinear{x,v1,u1}
3188 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
3189 /\ &0< azim x v1 v u1
3190 /\  azim x v1 v u1 < pi
3191 ==> &0 < ((v-x) cross (u - x)) dot (v1-x)`,
3192
3193 REPEAT STRIP_TAC
3194 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
3195 THEN REWRITE_TAC[fan80]
3196 THEN DISCH_THEN(LABEL_TAC"yeu em")
3197 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
3198 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
3199 ` (u:real^3)`] 
3200 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"))
3201 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`]
3202 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
3203 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
3204 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
3205 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
3206 THEN STRIP_TAC 
3207 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)`]
3208 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
3209 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
3210 THEN DISCH_TAC
3211 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))`]
3212 THEN REWRITE_TAC[ DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
3213 THEN REDUCE_ARITH_TAC
3214 THEN MATCH_MP_TAC REAL_LT_MUL
3215 THEN ASM_REWRITE_TAC[]
3216 THEN MATCH_MP_TAC REAL_LT_MUL
3217 THEN ASM_REWRITE_TAC[]
3218 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
3219 THEN POP_ASSUM MP_TAC
3220 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3221 THEN ASM_REWRITE_TAC[CROSS_TRIPLE]);;
3222
3223
3224
3225
3226
3227
3228
3229 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.
3230 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
3231 /\ sigma_fan x V E u w = v
3232 /\ &0<a /\ a< &1
3233 /\ fan80(x,V,E)
3234 /\ ~collinear{x,v1,u1}
3235 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
3236 /\ &0< azim x v1 v u1
3237 /\  azim x v1 v u1 < pi
3238 ==>
3239 ?t:real.  &0< t/\ t < &1
3240 /\ ~(aff_gt {x} {v,(&1-t)%((&1-a)%u+ a%w)+t%u} INTER aff_gt {x} {v1,u1}={})`,
3241
3242 REPEAT STRIP_TAC
3243 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`]
3244 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`]
3245 THEN POP_ASSUM MP_TAC
3246 THEN DISCH_THEN (LABEL_TAC"MA")
3247 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`]
3248 THEN POP_ASSUM MP_TAC
3249 THEN DISCH_THEN (LABEL_TAC"BE NHO")
3250 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
3251 THEN REWRITE_TAC[fan80]
3252 THEN DISCH_THEN(LABEL_TAC"yeu em")
3253 THEN ABBREV_TAC`ta=min (t:real) (t':real)/ &2`
3254 THEN EXISTS_TAC `(ta:real)`
3255 THEN SUBGOAL_THEN `&0< ta:real /\ ta < &1 /\ ta< t /\ ta< t'` ASSUME_TAC
3256 THENL(*1*)[
3257 POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
3258 THEN FIND_ASSUM MP_TAC`&0<t:real`
3259 THEN FIND_ASSUM MP_TAC`t:real < &1`
3260 THEN FIND_ASSUM MP_TAC`&0<t':real`
3261 THEN FIND_ASSUM MP_TAC`t':real < &1`
3262 THEN REAL_ARITH_TAC;(*1*)
3263
3264 ASM_REWRITE_TAC[]
3265 THEN MP_TAC(REAL_ARITH`ta< &1 ==> &0< (&1-ta):real`)
3266 THEN RESA_TAC
3267 THEN MRESA_TAC REAL_LT_MUL [`(&1-ta):real`;`a:real`]
3268 THEN MRESA_TAC REAL_LT_LMUL [`(&1-ta):real`;`a:real`;`&1`]
3269 THEN MP_TAC(REAL_ARITH` &0< ta /\ (&1-ta)*a< (&1-ta)* &1 :real==> (&1-ta)*a< &1`)
3270 THEN RESA_TAC
3271 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
3272 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
3273 ` (u:real^3)`] 
3274 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"))
3275 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=
3276 (&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`]
3277 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`]
3278 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
3279 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`;`u1:real^3`;`v:real^3`]
3280 THEN POP_ASSUM MP_TAC
3281 THEN DISCH_THEN (LABEL_TAC"CON")
3282 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`;]
3283 THEN MRESA_TAC th3[`(x:real^3)` ;` (v1:real^3)`;`u1:real^3`;]
3284 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
3285 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v1:real^3)`;`(u1:real^3) `;]
3286 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3 `;]
3287 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;EXTENSION;EMPTY;IN;NOT_FORALL_THM]
3288 THEN ABBREV_TAC`a1=(v-x):real^3`
3289 THEN ABBREV_TAC`a2=(((&1-ta)%((&1-a)%u+ a%w)+ta%u)-x):real^3`
3290 THEN ABBREV_TAC`a3=(v1-x) :real^3`
3291 THEN ABBREV_TAC`a4=u1-x:real^3`
3292 THEN ABBREV_TAC`va=a1 cross a2:real^3`
3293 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
3294 THEN EXISTS_TAC`(vb:real^3) cross (va:real^3)+(x:real^3)`
3295 THEN STRIP_TAC
3296 THENL(*2*)[
3297 EXISTS_TAC`&1-(vb:real^3) dot (a2:real^3)+ vb dot (a1:real^3)`
3298 THEN EXISTS_TAC`(vb:real^3) dot (a2:real^3)`
3299 THEN EXISTS_TAC`--((vb:real^3) dot (a1:real^3))`
3300 THEN REMOVE_THEN "MA"(fun th->  MRESA1_TAC th `ta:real`)
3301 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - vb dot a2 + vb dot a1) + vb dot a2 + --(vb dot a1) = &1`]
3302 THEN SUBGOAL_THEN `&0< --((vb:real^3) dot (a1:real^3))` ASSUME_TAC
3303 THENL(*3*)[EXPAND_TAC"vb"
3304 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
3305 THEN REWRITE_TAC[DOT_LNEG]
3306 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
3307 THEN REMOVE_THEN "CON"MP_TAC
3308 THEN REAL_ARITH_TAC;(*3*)
3309
3310 ASM_REWRITE_TAC[]
3311 THEN EXPAND_TAC"va"
3312 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_MUL_LNEG]
3313 THEN EXPAND_TAC"a1"
3314 THEN EXPAND_TAC"a2"
3315 THEN VECTOR_ARITH_TAC];(*2*)
3316
3317 ONCE_REWRITE_TAC[CROSS_SKEW]
3318 THEN EXPAND_TAC"vb"
3319 THEN REWRITE_TAC[CROSS_LAGRANGE;]
3320 THEN EXISTS_TAC`&1+(va:real^3) dot (a4:real^3)- va dot (a3:real^3)`
3321 THEN EXISTS_TAC`--(va:real^3) dot (a4:real^3)`
3322 THEN EXISTS_TAC`((va:real^3) dot (a3:real^3))`
3323 THEN REMOVE_THEN "BE NHO"(fun th->  MRESA1_TAC th `ta:real`)
3324 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`;]
3325
3326 THEN STRIP_TAC
3327 THENL(*3*)[
3328 EXPAND_TAC"va"
3329 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
3330 THEN REWRITE_TAC[DOT_LNEG]
3331 THEN POP_ASSUM MP_TAC
3332 THEN REAL_ARITH_TAC;(*3*)
3333
3334 STRIP_TAC 
3335 THENL(*4*)[
3336 EXPAND_TAC"va"
3337 THEN EXPAND_TAC"a2"
3338 THEN REWRITE_TAC[VECTOR_ARITH`((&1 - ta) % ((&1 - a) % u + a % w) + ta % u) - x
3339 =(&1 - ta) % ((&1 - a) % u + a % w-x) + ta % (u - x)`]
3340 THEN ABBREV_TAC`vu=(&1 - a) % u + a % w - x:real^3`
3341 THEN REWRITE_TAC[CROSS_RADD;CROSS_RMUL;DOT_LADD;DOT_LMUL;]
3342 THEN MRESAL_TAC coplanar_is_cross_fan[`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`;`v1:real^3`]
3343 [VECTOR_ARITH`((&1 - a) % u + a % w) - x=(&1 - a) % u + a % w - x`]
3344 THEN REDUCE_ARITH_TAC
3345 THEN MATCH_MP_TAC REAL_LT_MUL
3346 THEN ASM_REWRITE_TAC[];(*4*)
3347 EXPAND_TAC"a3"
3348 THEN EXPAND_TAC"a4"
3349 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)`]
3350 THEN VECTOR_ARITH_TAC]]]]);;
3351
3352
3353 let aff_gt_subset_aff_ge=prove(`!x:real^3 v:real^3 u:real^3.
3354 DISJOINT {x} {v,u}
3355 ==>
3356 aff_gt {x} {v,u} SUBSET aff_ge {x} {v,u}`,
3357 REPEAT STRIP_TAC
3358 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3359 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM;SUBSET]
3360 THEN REPEAT STRIP_TAC
3361 THEN EXISTS_TAC`t1:real`
3362 THEN EXISTS_TAC`t2:real`
3363 THEN EXISTS_TAC`t3:real`
3364 THEN ASM_REWRITE_TAC[]
3365 THEN ASM_TAC
3366 THEN REAL_ARITH_TAC);;
3367
3368
3369
3370 let aff_gt1_subset_aff_ge=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3371 DISJOINT {x} {v,u} /\ ~collinear {x,v1,u}
3372 /\ v1 IN aff_ge {x} {v,u}
3373 ==>
3374 aff_gt {x} {v1,u} SUBSET aff_ge {x} {v,u}`,
3375
3376 REPEAT STRIP_TAC
3377 THEN POP_ASSUM MP_TAC
3378 THEN MRESA_TAC th3[`x:real^3`;`v1:real^3`;`u:real^3`]
3379 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3380 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v1:real^3`;`u:real^3`][IN_ELIM_THM;SUBSET]
3381 THEN REPEAT STRIP_TAC
3382 THEN POP_ASSUM MP_TAC
3383 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % (t1 % x + t2 % v + t3 % u) + t3' % u
3384 =(t1'+ t2'*t1) % x + (t2'* t2) % v + (t2' * t3  + t3') % u:real^3`]
3385 THEN STRIP_TAC
3386 THEN EXISTS_TAC`t1' + t2' * t1:real`
3387 THEN EXISTS_TAC`t2' * t2:real`
3388 THEN EXISTS_TAC`t2' * t3 +t3':real`
3389 THEN MP_TAC(REAL_ARITH`&0<t2'==> &0<= t2'`)
3390 THEN RESA_TAC
3391 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t2:real`]
3392 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t3:real`]
3393 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1' + t2' * t1) + t2' * t2 + t2' * t3 + t3'=
3394 t1'+t2'*(t1+t2+t3)+t3'`; REAL_ARITH`A* &1=A`]
3395 THEN ASM_TAC
3396 THEN REAL_ARITH_TAC);;
3397
3398
3399 let aff_gt12_subset_aff_ge=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3400 DISJOINT {x} {v,u} /\ ~collinear {x,v1,v}
3401 /\ v1 IN aff_ge {x} {v,u}
3402 ==>
3403 aff_gt {x} {v1,v} SUBSET aff_ge {x} {v,u}`,
3404
3405 REPEAT STRIP_TAC
3406 THEN POP_ASSUM MP_TAC
3407 THEN MRESA_TAC th3[`x:real^3`;`v1:real^3`;`v:real^3`]
3408 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3409 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v1:real^3`;`v:real^3`][IN_ELIM_THM;SUBSET]
3410 THEN REPEAT STRIP_TAC
3411 THEN POP_ASSUM MP_TAC
3412 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % (t1 % x + t2 % v + t3 % u) + t3' % v
3413 =(t1'+ t2'*t1) % x + (t2'* t2+t3') % v + (t2' * t3 ) % u:real^3`]
3414 THEN STRIP_TAC
3415 THEN EXISTS_TAC`t1' + t2' * t1:real`
3416 THEN EXISTS_TAC`t2' * t2 +t3':real`
3417 THEN EXISTS_TAC`t2' * t3 :real`
3418 THEN MP_TAC(REAL_ARITH`&0<t2'==> &0<= t2'`)
3419 THEN RESA_TAC
3420 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t2:real`]
3421 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t3:real`]
3422 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1' + t2' * t1) + (t2' * t2 +t3')+ t2' * t3 =
3423 t1'+t2'*(t1+t2+t3)+t3'`; REAL_ARITH`A* &1=A`]
3424 THEN ASM_TAC
3425 THEN REAL_ARITH_TAC);;
3426
3427
3428 let aff_gt2_subset_aff_ge=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3429 DISJOINT {x} {v,u} /\ ~collinear {x,v1,u} /\ ~collinear {x,v1,v}
3430 /\ v1 IN aff_gt {x} {v,u}
3431 ==>
3432 azim x v1 v u= pi`,
3433
3434 REPEAT STRIP_TAC
3435 THEN POP_ASSUM MP_TAC
3436 THEN MRESA_TAC th3[`x:real^3`;`v1:real^3`;`u:real^3`]
3437 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3438 THEN MRESA_TAC  AZIM_EQ_PI[`x:real^3`;`v1:real^3`;`v:real^3`;`u:real^3`]
3439 THEN REPEAT STRIP_TAC
3440 THEN POP_ASSUM MP_TAC
3441 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v1 = t1 % x + t2 % v + t3 % u
3442 <=> t2 % v = (--t1) % x + v1 + (--t3) % u`]
3443 THEN MP_TAC(REAL_ARITH`&0<t2==> ~( t2= &0)`)
3444 THEN RESA_TAC
3445 THEN MP_TAC(REAL_ARITH`&0<t3==> -- t3< &0`)
3446 THEN RESA_TAC
3447 THEN MRESA1_TAC REAL_MUL_LINV`t2:real`
3448 THEN MRESA1_TAC REAL_LT_INV`t2:real`
3449 THEN MRESAL_TAC REAL_LT_LMUL[`inv t2:real`;`-- t3:real`;`&0`][REAL_ARITH`A * &0= &0`]
3450 THEN STRIP_TAC
3451 THEN MP_TAC(SET_RULE`t2 % v = --t1 % x + v1 + --t3 % u:real^3 ==> (inv (t2))%(t2 % v ) = (inv (t2))%( --t1 % x + v1 + --t3 % u)`)
3452 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3453 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C+D)=A%B+A%C+A%D`]
3454 THEN REDUCE_VECTOR_TAC
3455 THEN STRIP_TAC
3456 THEN MRESAL_TAC  AFF_LT_2_1[`x:real^3`;`v1:real^3`;`u:real^3`][IN_ELIM_THM;SUBSET]
3457 THEN EXISTS_TAC`(inv t2 * --t1):real`
3458 THEN EXISTS_TAC`inv t2:real`
3459 THEN EXISTS_TAC`(inv t2 * --t3):real`
3460 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t2 * (--t1) + inv t2 + inv t2 * (--t3)=
3461 inv t2 * (t2+ &1 -(t1 +t2 +t3))`; REAL_ARITH`A+ &1- &1=A`]);;
3462
3463
3464 let remove_variable_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 t1:real t2:real t3:real.
3465  &0 < t3 
3466 /\ w = t1 % x + t2 % v + t3 % u
3467 ==> u= inv(t3) % w - (inv(t3)*t1) % x- (inv(t3) * t2) % v`,
3468 REPEAT STRIP_TAC
3469 THEN POP_ASSUM MP_TAC
3470 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[VECTOR_ARITH`w = t1'' % x + t2'' % v + t3'' % u <=> t3'' % u = w-t1'' % x - t2'' % (v:real^3)`]
3471 THEN MP_TAC(REAL_ARITH `&0 < (t3:real) ==>  ~(t3 = &0)`)
3472 THEN MP_TAC(ISPEC`(t3:real)`REAL_LT_INV)
3473 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC(th))
3474 THEN STRIP_TAC THEN STRIP_TAC 
3475 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
3476 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC(th))
3477 THEN STRIP_TAC
3478 THEN STRIP_TAC
3479 THEN MP_TAC(SET_RULE`
3480 t3 % u = w-t1 % x - t2 % v:real^3
3481 ==> (inv (t3))%(t3 % u) = (inv (t3))%( w-t1 % x - t2 % v:real^3)`)
3482 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3483 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`&1 %A=A`;VECTOR_ARITH`A%(B-C-D)=A%B-A%C-A%D`] THEN ASSUME_TAC(th)));;
3484
3485
3486
3487 let aff_gt_inter_aff_gt=prove(`!(x:real^3) (v:real^3) (w:real^3).
3488 ~collinear {x,v,w}
3489 ==>
3490 aff_gt {x} {v , w} = aff_gt {x , v} {w} INTER aff_gt {x , w} {v}`,
3491
3492  REPEAT STRIP_TAC THEN MRESA_TAC th3 [`x:real^3`;`v:real^3`;`w:real^3`]
3493    THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w:real^3`]AFF_GT_1_2)
3494                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC 
3495                 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w:real^3`]AFF_GT_2_1)
3496                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC 
3497                 THEN MP_TAC(ISPECL[`x:real^3`;`w:real^3`;`v:real^3`]AFF_GT_2_1)
3498                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC 
3499    THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;EXTENSION]THEN GEN_TAC THEN EQ_TAC 
3500 THENL(*1*)[
3501 STRIP_TAC THEN STRIP_TAC
3502 THENL(*2*)[
3503     EXISTS_TAC `t1:real` THEN EXISTS_TAC `t2:real` THEN EXISTS_TAC `t3:real` THEN ASM_MESON_TAC[];
3504 EXISTS_TAC `(t1:real)` THEN
3505          EXISTS_TAC `(t3:real)` THEN EXISTS_TAC `(t2:real)` 
3506 THEN
3507          ASM_MESON_TAC[REAL_ARITH `(t1:real)+ (t3:real) +(t2:real)=t1 + t2 + t3`;VECTOR_ARITH ` t1 % x + t2 % v + t3 % w = (t1:real) % (x:real^3) + (t3:real) % (w:real^3) + (t2:real) % (v:real^3)`]](*2*);
3508
3509          STRIP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC 
3510            THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(PATH_CONV "rrlr" o ONCE_DEPTH_CONV )[th] THEN ASSUME_TAC(th)) THEN POP_ASSUM MP_TAC 
3511            THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(PATH_CONV "rrlr" o ONCE_DEPTH_CONV )[SYM(th)] THEN ASSUME_TAC(th))
3512 THEN DISJ_CASES_TAC(SET_RULE`t3 - t2' = &0 \/ ~((t3:real) - (t2':real) = &0) `)
3513 THENL[POP_ASSUM MP_TAC
3514 THEN REWRITE_TAC[REAL_ARITH`A-B= &0 <=> A=B`]
3515 THEN REPEAT STRIP_TAC
3516 THEN EXISTS_TAC`t1':real`
3517 THEN EXISTS_TAC`t3':real`
3518 THEN EXISTS_TAC`t2':real`
3519 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % w + t3' % v = t1' % x + t3' % v + t2' % w`;
3520 REAL_ARITH`t1' + t3' + t2'=t1' + t2' + t3'`]
3521 THEN ASM_TAC THEN REAL_ARITH_TAC;
3522
3523 REWRITE_TAC[VECTOR_ARITH
3524  `a % x + b % y + c % z= a1 % x + b1 % z + c1 % y <=> (c-b1) % z = (a1-a) % x + (c1-b)% y`]        
3525            THEN REWRITE_TAC[REAL_ARITH`a+b+c=a1+b1+c1<=> c1-b=(a-a1)+(c-b1)`]
3526 THEN MRESA1_TAC REAL_MUL_LINV`t3 - t2'`
3527            THEN DISCH_TAC THEN DISCH_TAC           THEN DISCH_TAC THEN DISCH_TAC 
3528 THEN MP_TAC(SET_RULE`
3529 (t3 - t2') % w = (t1' - t1) % x + (t3' - t2) %  v:real^3
3530 ==> (inv (t3 - t2'))%((t3 - t2') % w ) = (inv (t3 - t2'))%((t1' - t1) % x + (t3' - t2) %  v:real^3)`)
3531 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3532 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`&1 %A=A`;VECTOR_ARITH`A%(B+C)=A%B+A%C`] THEN ASSUME_TAC(SYM(th)))
3533 THEN STRIP_TAC
3534 THEN SUBGOAL_THEN`w IN aff{(x:real^3),v}` ASSUME_TAC
3535 THENL[REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM;] THEN EXISTS_TAC`inv(t3-t2') *(t1'-t1)`
3536 THEN EXISTS_TAC`inv(t3-t2') *(t3'-t2)` THEN ASM_REWRITE_TAC[REAL_ARITH`A*B+A*C=A*(B+C)`];
3537
3538 ASM_SET_TAC[]]]]);;
3539
3540
3541
3542 let aff_gt3_subset_aff_gt=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3543 DISJOINT {x} {v,u} /\ ~collinear{x,v,v1}
3544 /\ v1 IN aff_gt {x} {v,u}
3545 ==>
3546 aff_gt {x} {v,v1} SUBSET aff_gt {x} {v,u}`,
3547 REPEAT STRIP_TAC
3548 THEN POP_ASSUM MP_TAC
3549 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`v1:real^3`]
3550 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3551 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`v1:real^3`][IN_ELIM_THM;SUBSET]
3552 THEN REPEAT STRIP_TAC
3553 THEN POP_ASSUM MP_TAC
3554 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v + t3' % (t1 % x + t2 % v + t3 % u)
3555 =(t1'+ t3'*t1) % x + (t2'+ t3' * t2) % v + (t3' * t3) % u:real^3`]
3556 THEN STRIP_TAC
3557 THEN EXISTS_TAC`t1' + t3' * t1:real`
3558 THEN EXISTS_TAC`t2' + t3' * t2:real`
3559 THEN EXISTS_TAC`t3' * t3:real`
3560 THEN MRESA_TAC REAL_LT_MUL[`t3':real`;`t2:real`]
3561 THEN MRESA_TAC REAL_LT_MUL[`t3':real`;`t3:real`]
3562 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1' + t3' * t1) + (t2' + t3' * t2) + t3' * t3=
3563 t1'+ t2' + t3'*(t1+t2+t3)`; REAL_ARITH`A* &1=A`]
3564 THEN ASM_TAC
3565 THEN REAL_ARITH_TAC);;
3566
3567
3568
3569
3570 let aff_ge1_subset_aff_ge=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3571 DISJOINT {x} {v,u} /\ ~collinear{x,v1,u}
3572 /\ v1 IN aff_ge {x} {v,u}
3573 ==>
3574 aff_ge {x} {v1,u} SUBSET aff_ge {x} {v,u}`,
3575
3576 REPEAT STRIP_TAC
3577 THEN POP_ASSUM MP_TAC
3578 THEN MRESA_TAC th3[`x:real^3`;`v1:real^3`;`u:real^3`]
3579 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3580 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v1:real^3`;`u:real^3`][IN_ELIM_THM;SUBSET]
3581 THEN REPEAT STRIP_TAC
3582 THEN POP_ASSUM MP_TAC
3583 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % (t1 % x + t2 % v + t3 % u) + t3' % u
3584 =(t1'+ t2'*t1) % x + (t2'* t2) % v + (t2' * t3  + t3') % u:real^3`]
3585 THEN STRIP_TAC
3586 THEN EXISTS_TAC`t1' + t2' * t1:real`
3587 THEN EXISTS_TAC`t2' * t2:real`
3588 THEN EXISTS_TAC`t2' * t3 +t3':real`
3589 THEN MP_TAC(REAL_ARITH`&0<t2'==> &0<= t2'`)
3590 THEN RESA_TAC
3591 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t2:real`]
3592 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t3:real`]
3593 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1' + t2' * t1) + t2' * t2 + t2' * t3 + t3'=
3594 t1'+t2'*(t1+t2+t3)+t3'`; REAL_ARITH`A* &1=A`]
3595 THEN ASM_TAC
3596 THEN REAL_ARITH_TAC);;
3597
3598
3599 let aff_ge_1_1_subset_aff_ge_fan=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3600 DISJOINT {x} {v,u} /\ ~(x=v1)
3601 /\ v1 IN aff_ge {x} {v,u}
3602 ==>
3603 aff_ge {x} {v1} SUBSET aff_ge {x} {v,u}`,
3604
3605 REPEAT STRIP_TAC
3606 THEN POP_ASSUM MP_TAC
3607 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3608 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`v1:real^3`][IN_ELIM_THM;SUBSET]
3609 THEN REPEAT STRIP_TAC
3610 THEN POP_ASSUM MP_TAC
3611 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % (t1 % x + t2 % v + t3 % u)
3612 =(t1'+ t2'*t1) % x + (t2'* t2) % v + (t2' * t3 ) % u:real^3`]
3613 THEN STRIP_TAC
3614 THEN EXISTS_TAC`t1' + t2' * t1:real`
3615 THEN EXISTS_TAC`t2' * t2:real`
3616 THEN EXISTS_TAC`t2' * t3 :real`
3617 THEN MP_TAC(REAL_ARITH`&0<t2'==> &0<= t2'`)
3618 THEN RESA_TAC
3619 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t2:real`]
3620 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t3:real`]
3621 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1' + t2' * t1) + t2' * t2 + t2' * t3 =
3622 t1'+t2'*(t1+t2+t3)`; REAL_ARITH`A* &1=A`]);;
3623
3624
3625
3626 let decomposition_planar_by_angle_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
3627 ~ collinear {x,v,u} /\ ~collinear {x,v,w}
3628 /\ w IN aff_ge {x,v} {u}
3629 ==> u IN aff_gt {x} {v,w} \/ w IN aff_ge {x} {v,u}`,
3630 REPEAT STRIP_TAC
3631 THEN MRESAL_TAC aff_ge_inter_aff_ge[`(x:real^3)`;`(v:real^3)`;`(u:real^3)`][INTER; IN_ELIM_THM]
3632 THEN REMOVE_ASSUM_TAC
3633 THEN POP_ASSUM MP_TAC
3634 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`w:real^3`; `u:real^3`]
3635 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
3636 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`w:real^3`; `u:real^3`]
3637 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
3638 THEN MRESAL_TAC  AFF_GT_2_1[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
3639 THEN REPEAT STRIP_TAC
3640 THEN DISJ_CASES_TAC(REAL_ARITH`(&0 < t2) \/   &0 <= --(t2:real)`)
3641 THENL[
3642 SUBGOAL_THEN `u IN aff_gt {x} {v,w:real^3}` ASSUME_TAC
3643 THENL[
3644 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
3645 THEN EXISTS_TAC`t1:real`
3646 THEN EXISTS_TAC`t2:real`
3647 THEN EXISTS_TAC`t3:real`
3648 THEN MP_TAC(REAL_ARITH`&0< t3==> &0 <= t3:real`)
3649 THEN ASM_REWRITE_TAC[];
3650 POP_ASSUM MP_TAC THEN SET_TAC[]];
3651 MRESA_TAC remove_variable_fan[`x:real^3`; `v:real^3`; `w:real^3`;`u:real^3`;`t1:real`;`t2:real`;`t3:real`]
3652 THEN POP_ASSUM MP_TAC
3653 THEN POP_ASSUM MP_TAC
3654 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th);])
3655 THEN DISCH_TAC
3656 THEN REWRITE_TAC[VECTOR_ARITH`inv t3 % u - (inv t3 * t1) % x - (inv t3 * t2) % v
3657 =(--inv t3 * t1) % x + inv t3 % u + (inv t3 * (--t2)) % v`]
3658 THEN MP_TAC(REAL_ARITH`&0<t3==> ~( t3= &0)`)
3659 THEN RESA_TAC
3660 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
3661 THEN MRESA1_TAC REAL_LT_INV`t3:real`
3662 THEN MP_TAC(REAL_ARITH`&0< inv t3==> &0 <= inv t3`)
3663 THEN RESA_TAC
3664 THEN MRESA_TAC REAL_LE_MUL[`inv t3:real`;`-- (t2:real)`]
3665 THEN DISCH_TAC
3666 THEN SUBGOAL_THEN `w IN aff_ge {x, u} {v:real^3}` ASSUME_TAC
3667 THENL[ 
3668 MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
3669 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`u:real^3`;`v:real^3`][IN_ELIM_THM]
3670 THEN EXISTS_TAC`(--inv t3 * t1):real`
3671 THEN EXISTS_TAC`inv t3:real`
3672 THEN EXISTS_TAC`(inv t3 * --t2):real`
3673 THEN ASM_REWRITE_TAC[REAL_ARITH`--inv t3 * t1 + inv t3 + inv t3 * --t2=
3674 inv t3 * (t3+ &1- (t1 +t2 + t3))`; REAL_ARITH`a + &1 - &1 =a`];
3675 POP_ASSUM MP_TAC THEN SET_TAC[]]]);;
3676
3677
3678
3679
3680
3681
3682
3683 let properties_of_fan7=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 v1:real^3  u1:real^3.
3684 FAN(x,V,E)/\ {v,u} IN E /\ {v1,u1} IN E /\ v IN aff_ge {x} {v1,u1}
3685 ==> v = v1 \/ v = u1`,
3686
3687 REPEAT STRIP_TAC
3688 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3689 THEN REWRITE_TAC[FAN; fan6; fan7]
3690 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
3691 THEN STRIP_TAC 
3692   THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(v:real^3),(u:real^3)}`;`{(v1:real^3),(u1:real^3)}`]th)) 
3693   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3694 THEN SUBGOAL_THEN `(v:real^3) IN aff_ge {(x:real^3)} {(v:real^3),(u:real^3)}` ASSUME_TAC
3695 THENL(*1*)[
3696  MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;` (u:real^3)`]AFF_GE_1_2) 
3697    THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3698 THEN EXISTS_TAC `&0:real` 
3699   THEN EXISTS_TAC `&1:real` THEN EXISTS_TAC `&0:real`  
3700 THEN REWRITE_TAC[VECTOR_ARITH`w= &0 % x+ &1 % w + &0 % v `] THEN REAL_ARITH_TAC;
3701
3702 DISCH_TAC
3703 THEN MP_TAC(SET_RULE`v IN aff_ge {x} {v, u} /\ v IN aff_ge {x} {v1, u1} ==> v IN aff_ge {x} {v, u} INTER aff_ge {x:real^3} {v1, u1:real^3}`)
3704 THEN RESA_TAC
3705 THEN POP_ASSUM MP_TAC
3706 THEN DISJ_CASES_TAC(SET_RULE`{v, u} INTER {v1, u1:real^3}={} \/ ~({v, u} INTER {v1, u1}={})`)
3707 THENL(*2*)[
3708 ASM_REWRITE_TAC[]
3709 THEN SUBGOAL_THEN`aff_ge {x:real^3} {}= {y| ?t1. t1= &1 /\ y= t1 %x}` ASSUME_TAC
3710 THENL(*3*)[
3711 ASSUME_TAC(SET_RULE `DISJOINT {x:real^3} {}`)
3712 THEN AFF_TAC;
3713
3714 ASM_REWRITE_TAC[IN_ELIM_THM]
3715 THEN STRIP_TAC THEN POP_ASSUM MP_TAC
3716 THEN ASM_REWRITE_TAC[] THEN REDUCE_VECTOR_TAC
3717 THEN ASM_REWRITE_TAC[]];(*2*)
3718
3719 DISJ_CASES_TAC(SET_RULE`~(v IN {v, u} INTER {v1, u1:real^3}) \/ (v IN {v, u} INTER {v1, u1})`)
3720 THENL(*3*)[
3721 SUBGOAL_THEN`({v:real^3, u} INTER {v1, u1}={u})` ASSUME_TAC
3722 THENL(*4*)[
3723  ASM_TAC
3724 THEN SET_TAC[];(*4*)
3725
3726 ASM_REWRITE_TAC[]
3727 THEN SUBGOAL_THEN` aff_ge {(x:real^3)} {(u:real^3)} SUBSET aff {x,u}` ASSUME_TAC
3728 THENL(*5*)[
3729 MP_TAC(ISPECL[`(x:real^3)`;` (u:real^3)`;]AFF_GE_1_1) 
3730 THEN MP_TAC(SET_RULE`~((x:real^3) = (u:real^3))==> DISJOINT {x} {u}`)
3731   THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
3732   THEN ASM_REWRITE_TAC[]
3733   THEN DISCH_TAC THEN ASM_REWRITE_TAC[aff;AFFINE_HULL_2] THEN ASM_TAC THEN SET_TAC[];(*5*)
3734
3735 FIND_ASSUM MP_TAC`{v,u:real^3} IN E`
3736 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3737 THEN DISCH_TAC
3738 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` v:real^3`;`u:real^3`]
3739 THEN ASM_TAC
3740 THEN SET_TAC[]]];(*3*)
3741
3742 POP_ASSUM MP_TAC
3743 THEN SET_TAC[]]]])  ;;
3744
3745
3746
3747
3748
3749
3750 let properties1_of_fan7=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 v1:real^3  u1:real^3.
3751 FAN(x,V,E)/\ {v,u} IN E /\ {v1,u1} IN E /\ v IN aff_ge {x} {v1}
3752 ==> v = v1`,
3753
3754 REPEAT STRIP_TAC
3755 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3756 THEN REWRITE_TAC[FAN; fan6; fan7]
3757 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
3758 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u1:real^3`;`v1:real^3`]
3759 THEN MP_TAC(SET_RULE`(v1:real^3) IN V==> (?v. v IN V /\ {v1} = {v})`)
3760 THEN REDA_TAC
3761 THEN STRIP_TAC 
3762   THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(v:real^3),(u:real^3)}`;`{(v1:real^3)}`]th)) 
3763   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3764 THEN SUBGOAL_THEN `(v:real^3) IN aff_ge {(x:real^3)} {(v:real^3),(u:real^3)}` ASSUME_TAC
3765 THENL(*1*)[
3766  MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;` (u:real^3)`]AFF_GE_1_2) 
3767    THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3768 THEN EXISTS_TAC `&0:real` 
3769   THEN EXISTS_TAC `&1:real` THEN EXISTS_TAC `&0:real`  
3770 THEN REWRITE_TAC[VECTOR_ARITH`w= &0 % x+ &1 % w + &0 % v `] THEN REAL_ARITH_TAC;
3771 DISCH_TAC
3772 THEN MP_TAC(SET_RULE`v IN aff_ge {x} {v, u:real^3} /\ v IN aff_ge {x} {v1} ==> v IN aff_ge {x} {v, u} INTER aff_ge {x:real^3} {v1}`)
3773 THEN RESA_TAC
3774 THEN POP_ASSUM MP_TAC
3775 THEN DISJ_CASES_TAC(SET_RULE`{v, u:real^3} INTER {v1}={} \/ ~({v, u} INTER {v1}={})`)
3776 THENL(*2*)[
3777 ASM_REWRITE_TAC[]
3778 THEN SUBGOAL_THEN`aff_ge {x:real^3} {}= {y| ?t1. t1= &1 /\ y= t1 %x}` ASSUME_TAC
3779 THENL(*3*)[
3780 ASSUME_TAC(SET_RULE `DISJOINT {x:real^3} {}`)
3781 THEN AFF_TAC;
3782 ASM_REWRITE_TAC[IN_ELIM_THM]
3783 THEN STRIP_TAC THEN POP_ASSUM MP_TAC
3784 THEN ASM_REWRITE_TAC[] THEN REDUCE_VECTOR_TAC
3785 THEN ASM_REWRITE_TAC[]];(*2*)
3786
3787 DISJ_CASES_TAC(SET_RULE`~(v IN {v, u} INTER {v1:real^3}) \/ (v IN {v, u} INTER {v1})`)
3788 THENL(*3*)[
3789 SUBGOAL_THEN`({v:real^3, u} INTER {v1:real^3}={u})` ASSUME_TAC
3790 THENL(*4*)[
3791  ASM_TAC
3792 THEN SET_TAC[];
3793 ASM_REWRITE_TAC[]
3794 THEN SUBGOAL_THEN` aff_ge {(x:real^3)} {(u:real^3)} SUBSET aff {x,u}` ASSUME_TAC
3795 THENL(*5*)[
3796 MP_TAC(ISPECL[`(x:real^3)`;` (u:real^3)`;]AFF_GE_1_1) 
3797 THEN MP_TAC(SET_RULE`~((x:real^3) = (u:real^3))==> DISJOINT {x} {u}`)
3798   THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
3799   THEN ASM_REWRITE_TAC[]
3800   THEN DISCH_TAC THEN ASM_REWRITE_TAC[aff;AFFINE_HULL_2] THEN ASM_TAC THEN SET_TAC[];
3801 FIND_ASSUM MP_TAC`{v,u:real^3} IN E`
3802 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3803 THEN DISCH_TAC
3804 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
3805 THEN ASM_TAC
3806 THEN SET_TAC[]]];(*3*)
3807
3808 POP_ASSUM MP_TAC
3809 THEN SET_TAC[]]]])  ;;
3810
3811
3812
3813 let point_in_aff_ge=prove(`!(x:real^3) (v:real^3) (w:real^3).
3814 ~collinear {x,v,w}
3815 ==>
3816 x IN aff_ge {x} {v,w}
3817 /\ v IN aff_ge {x} {v,w}
3818 /\ w IN aff_ge {x} {v,w}`,
3819
3820 REPEAT GEN_TAC THEN STRIP_TAC THEN MRESA_TAC th3 [`x:real^3`;`v:real^3`;`w:real^3`]
3821   THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w:real^3`]AFF_GE_1_2)
3822 THEN RESA_TAC
3823                 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3824 THEN STRIP_TAC
3825 THENL[ EXISTS_TAC`&1:real`
3826 THEN EXISTS_TAC`&0:real`
3827 THEN EXISTS_TAC`&0:real`
3828 THEN REDUCE_VECTOR_TAC
3829 THEN REAL_ARITH_TAC;  
3830 STRIP_TAC
3831 THENL[ EXISTS_TAC`&0:real`
3832 THEN EXISTS_TAC`&1:real`
3833 THEN EXISTS_TAC`&0:real`
3834 THEN REDUCE_VECTOR_TAC
3835 THEN REAL_ARITH_TAC;
3836
3837 EXISTS_TAC`&0:real`
3838 THEN EXISTS_TAC`&0:real`
3839 THEN EXISTS_TAC`&1:real`
3840 THEN REDUCE_VECTOR_TAC
3841 THEN REAL_ARITH_TAC]]);;  
3842
3843
3844 let aff_ge_subset_aff_gt_union_aff_ge=prove(`!(x:real^3) (v:real^3) (w:real^3).
3845 ~collinear {x,v,w}
3846 ==>
3847 aff_ge {x} {v , w} SUBSET  (aff_gt {x , v} {w}) UNION (aff_ge {x} {v})`,
3848 REPEAT STRIP_TAC THEN MRESA_TAC th3 [`x:real^3`;`v:real^3`;`w:real^3`]
3849   THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w:real^3`]AFF_GE_1_2)
3850                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC 
3851                 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w:real^3`]AFF_GT_2_1)
3852                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC 
3853                 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`]AFF_GE_1_1)
3854                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN ASM_REWRITE_TAC[SUBSET; UNION;IN_ELIM_THM]
3855   THEN GEN_TAC THEN
3856 REWRITE_TAC[REAL_ARITH `(&0 <= (t3:real)) <=> (&0 < t3) \/ ( t3 = &0)`; TAUT `(a \/ b) /\ (c \/ d) /\ e /\ f <=> ((a \/ b)/\ c /\ e /\ f) \/ ((a \/ b) /\ d /\ e /\ f)`; EXISTS_OR_THM] THEN
3857 MATCH_MP_TAC MONO_OR THEN
3858 SUBGOAL_THEN `((?t1:real t2:real t3:real.
3859        (&0 < t2 \/ t2 = &0) /\
3860         &0< t3 /\
3861        t1 + t2 + t3 = &1 /\
3862        (x':real^3) = t1 % x + t2 % v + t3 % w)
3863   ==> (?t1 t2 t3.
3864             &0< t3 /\ t1 + t2 + t3 = &1 /\ x' = t1 % x + t2 % v + t3 % w))` ASSUME_TAC
3865 THENL  
3866 [MESON_TAC[];
3867      ASM_REWRITE_TAC[] THEN MATCH_MP_TAC MONO_EXISTS THEN GEN_TAC THEN MATCH_MP_TAC MONO_EXISTS THEN GEN_TAC THEN
3868      REWRITE_TAC[LEFT_IMP_EXISTS_THM] THEN GEN_TAC THEN
3869      REWRITE_TAC[REAL_ARITH `(&0< (t2:real) \/ (t2 = &0)) <=> ( &0<= t2)`] THEN STRIP_TAC THEN POP_ASSUM MP_TAC THEN
3870      POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[] THEN
3871      REWRITE_TAC [REAL_ARITH `(a:real)+ &0 = a`; VECTOR_ARITH  `&0 % (w:real^3) = vec 0`; 
3872      VECTOR_ARITH `  ((x':real^3) = (t1:real) % (x:real^3) + (t2:real) % (v:real^3) + vec 0)<=> ( x' = t1 % x + t2 % v )` ]
3873        THEN MESON_TAC[]]);;     
3874
3875 let pos_in_aff_ge_fan=prove(`!x:real^3 v:real^3 u:real^3 a:real.
3876 DISJOINT {x} {v,u}
3877 /\ &0<a /\ a< &1
3878 ==>
3879 (&1-a)%v + a % u IN aff_ge {x} {v,u:real^3}`,
3880
3881 REPEAT STRIP_TAC
3882 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3883 THEN EXISTS_TAC`&0`
3884 THEN EXISTS_TAC`&1 -a:real`
3885 THEN EXISTS_TAC`a:real`
3886 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
3887 THEN RESA_TAC
3888 THEN ASM_REWRITE_TAC[]
3889 THEN REDUCE_VECTOR_TAC
3890 THEN REAL_ARITH_TAC);;
3891
3892
3893
3894 let aff_gt1_subset_aff_gt=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
3895 DISJOINT {x} {v,u} /\ ~collinear {x,v1,u}
3896 /\ v1 IN aff_gt {x} {v,u}
3897 ==>
3898 aff_gt {x} {v1,u} SUBSET aff_gt {x} {v,u}`,
3899
3900 REPEAT STRIP_TAC
3901 THEN POP_ASSUM MP_TAC
3902 THEN MRESA_TAC th3[`x:real^3`;`v1:real^3`;`u:real^3`]
3903 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
3904 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v1:real^3`;`u:real^3`][IN_ELIM_THM;SUBSET]
3905 THEN REPEAT STRIP_TAC
3906 THEN POP_ASSUM MP_TAC
3907 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % (t1 % x + t2 % v + t3 % u) + t3' % u
3908 =(t1'+ t2'*t1) % x + (t2'* t2) % v + (t2' * t3  + t3') % u:real^3`]
3909 THEN STRIP_TAC
3910 THEN EXISTS_TAC`t1' + t2' * t1:real`
3911 THEN EXISTS_TAC`t2' * t2:real`
3912 THEN EXISTS_TAC`t2' * t3 +t3':real`
3913 THEN MP_TAC(REAL_ARITH`&0<t2'==> &0<= t2'`)
3914 THEN RESA_TAC
3915 THEN MRESA_TAC REAL_LT_MUL[`t2':real`;`t2:real`]
3916 THEN MRESA_TAC REAL_LT_MUL[`t2':real`;`t3:real`]
3917 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1' + t2' * t1) + t2' * t2 + t2' * t3 + t3'=
3918 t1'+t2'*(t1+t2+t3)+t3'`; REAL_ARITH`A* &1=A`]
3919 THEN ASM_TAC
3920 THEN REAL_ARITH_TAC);;
3921
3922
3923
3924
3925
3926 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.
3927 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
3928 /\ sigma_fan x V E u w = v
3929 /\ &0<a /\ a< &1
3930 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
3931 /\ fan80(x,V,E)
3932
3933 /\ (!h:real. &0<h /\ h< a
3934 ==> aff_gt{x} {v,(&1-h)%u+ h % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
3935 ==> aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={}`,
3936
3937 REPEAT STRIP_TAC
3938 THEN POP_ASSUM MP_TAC
3939 THEN POP_ASSUM MP_TAC
3940 THEN POP_ASSUM MP_TAC
3941 THEN DISCH_THEN(LABEL_TAC"EM")
3942 THEN DISCH_TAC
3943 THEN POP_ASSUM (fun th-> MP_TAC (th) THEN ASSUME_TAC(th))
3944 THEN REWRITE_TAC[fan80]
3945 THEN DISCH_THEN(LABEL_TAC"BE")
3946 THEN DISCH_THEN(LABEL_TAC"YEU")
3947 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM]
3948 THEN GEN_TAC
3949 THEN EQ_TAC
3950 THENL(*1*)[
3951 STRIP_TAC 
3952 THEN POP_ASSUM MP_TAC
3953 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
3954 THEN POP_ASSUM MP_TAC
3955 THEN POP_ASSUM MP_TAC
3956 THEN DISCH_THEN(LABEL_TAC"A")
3957 THEN DISCH_TAC
3958 THEN REMOVE_THEN "A" MP_TAC
3959 THEN POP_ASSUM(fun th->REWRITE_TAC[(th)])
3960 THEN POP_ASSUM MP_TAC
3961 THEN DISCH_THEN(LABEL_TAC"A")
3962 THEN DISCH_TAC
3963 THEN REMOVE_THEN "A" MP_TAC
3964 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") )
3965 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`]
3966 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
3967 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3968 ` (v:real^3)`]
3969 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
3970 ` (v':real^3)`]  
3971 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
3972 THEN POP_ASSUM MP_TAC
3973 THEN DISCH_THEN(LABEL_TAC "VUT1")
3974 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3975 THEN POP_ASSUM MP_TAC
3976 THEN DISCH_THEN(LABEL_TAC "VUT")
3977 THEN REPEAT STRIP_TAC
3978 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
3979 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
3980 THEN DISCH_THEN(LABEL_TAC "VUT1")
3981 THEN DISCH_TAC THEN DISCH_TAC
3982 THEN DISJ_CASES_TAC(REAL_ARITH`(t3'= &0) \/ ~(t3':real= &0)`)
3983 THENL(*2*)[
3984 ASM_REWRITE_TAC[]
3985 THEN REDUCE_ARITH_TAC
3986 THEN REDUCE_VECTOR_TAC
3987 THEN DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
3988 THENL(*3*)[
3989 ASM_REWRITE_TAC[]
3990 THEN REDUCE_ARITH_TAC
3991 THEN REDUCE_VECTOR_TAC
3992 THEN DISCH_TAC
3993 THEN ASM_REWRITE_TAC[]
3994 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
3995 THEN RESA_TAC
3996 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
3997 THEN RESA_TAC
3998 THEN ASM_REWRITE_TAC[]
3999 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM(th)])`t1 + t2 + t3 = &1:real`
4000 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % (((t1 + t2 + t3) - a) % u + a % w) =
4001  (t1 + t2 + t3) % x<=>(t3) % (((t1 + t2 + t3) - a) % u + a % w- x)=(-- t2) % (v-x) `]
4002 THEN ASM_REWRITE_TAC[IN;EMPTY]
4003 THEN STRIP_TAC
4004 THEN MP_TAC(SET_RULE`
4005 (t3) % ((&1 - a) % u + a % w- x)=(-- t2) % (v-x)
4006 ==> (inv (t3))%((t3) % ((&1 - a) % u + a % w- x) ) = (inv (t3))%((-- t2) % (v-x)):real^3`)
4007 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4008 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;]
4009 THEN REDUCE_VECTOR_TAC
4010 THEN REWRITE_TAC[VECTOR_ARITH`E+A-B=C%(D-B)<=>E+A=(&1-C)%B+C%D`;]
4011 THEN STRIP_TAC
4012 THEN FIND_ASSUM MP_TAC `~((&1 - a) % u + a % w IN aff {x, v:real^3})`
4013 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4014 THEN EXISTS_TAC`&1-(inv t3 * (--t2)):real`
4015 THEN EXISTS_TAC`(inv t3 * (--t2)):real`
4016 THEN ASM_REWRITE_TAC[]
4017 THEN REAL_ARITH_TAC;(*3*)
4018
4019 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
4020 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
4021 THEN DISCH_THEN(LABEL_TAC"MAI")
4022 THEN DISCH_THEN (LABEL_TAC"YEU EM")
4023 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
4024  (&1 - t2') % x + t2' % v'<=> t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3 `]
4025 THEN MP_TAC(ISPEC`(t2':real)`REAL_MUL_LINV)
4026 THEN RESA_TAC
4027 THEN STRIP_TAC
4028 THEN MP_TAC(SET_RULE`
4029 t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3
4030 ==> (inv (t2'))%(t2' % v' ) = (inv (t2'))%((t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3)
4031 `)
4032 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4033 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`]
4034 THEN REDUCE_VECTOR_TAC
4035 THEN DISCH_TAC
4036 THEN SUBGOAL_THEN `~coplanar{x:real^3,v':real^3,v:real^3,u:real^3}` ASSUME_TAC
4037 THENL(*4*)[
4038
4039 POP_ASSUM MP_TAC
4040 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v', v, u}= {(--x) +x, (--x) +v', (--x) +v, (--x) +u}`)
4041 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`]
4042 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
4043 THEN DISCH_TAC
4044 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
4045                          (inv t2' * t2) % v +
4046                          (inv t2' * t3) % ((&1 - a) % u + a % w)) -
4047                         x=(inv t2' * t2) % (v-x) +
4048                          (inv t2' * t3) % ((&1 - a) % u + a % w-x)`])
4049 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==>  &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
4050 THEN REMOVE_THEN"MAI" MP_TAC
4051 THEN DISCH_TAC
4052 THEN REMOVE_ASSUM_TAC
4053 THEN RESA_TAC
4054 THEN POP_ASSUM MP_TAC
4055 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
4056 THEN RESA_TAC
4057 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
4058 THEN RESA_TAC
4059 THEN STRIP_TAC
4060 THEN MP_TAC(SET_RULE`
4061 t2 + t3 = &1 - t1:real
4062 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
4063 `)
4064 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4065 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
4066 THEN STRIP_TAC
4067 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
4068 THEN RESA_TAC
4069 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
4070 THEN RESA_TAC
4071 THEN MRESA_TAC REAL_LT_MUL[`t2':real`;`inv (&1- t1):real`]
4072 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
4073 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
4074 THEN MP_TAC(REAL_ARITH`&0< (t2') * inv (&1- t1) ==> ~((t2')* inv(&1- t1)= &0)`)
4075 THEN RESA_TAC
4076 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
4077 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`]
4078 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
4079 THEN REDUCE_VECTOR_TAC
4080 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+E%(C+D))=A%B+(A*E)%(C+D)`;
4081 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
4082 THEN REDUCE_ARITH_TAC
4083 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`]
4084 THEN DISCH_TAC
4085 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
4086 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
4087 THEN POP_ASSUM MP_TAC
4088 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4089 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}`)
4090 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`]
4091 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
4092 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4093 THEN DISCH_TAC
4094 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`]
4095 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
4096 THEN POP_ASSUM MP_TAC
4097 THEN REWRITE_TAC[VECTOR_ARITH`
4098 (&1 - inv (&1 - t1) * t3) % (v - x) +
4099                         (inv (&1 - t1) * t3) % (((&1 - a) % u + a % w) - x)=
4100 (&1 - inv (&1 - t1) * t3) % (v - x) +
4101                             (inv (&1 - t1) * t3) % ((&1 - a) % u + a % w - x)`];(*4*)
4102
4103 POP_ASSUM MP_TAC
4104 THEN POP_ASSUM MP_TAC
4105 THEN DISCH_THEN (LABEL_TAC"DICH")
4106 THEN DISCH_TAC
4107 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
4108 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
4109 THEN RESA_TAC
4110 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
4111 THEN RESA_TAC
4112 THEN MRESA1_TAC REAL_LT_INV`t2':real`
4113 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
4114 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
4115 THEN SUBGOAL_THEN `(v':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
4116 THENL(*5*)[
4117
4118 ASM_REWRITE_TAC[IN_ELIM_THM]
4119 THEN EXISTS_TAC`(&1 - inv t2' * t2 - inv t2' * t3:real)`
4120 THEN EXISTS_TAC`inv t2' * t2:real`
4121 THEN EXISTS_TAC`(inv t2' * t3:real)`
4122 THEN ASM_REWRITE_TAC[]
4123 THEN REAL_ARITH_TAC;(*5*)
4124
4125 REMOVE_THEN "DICH" MP_TAC
4126 THEN REMOVE_THEN "VUT" MP_TAC
4127 THEN DISCH_TAC
4128 THEN REMOVE_ASSUM_TAC
4129 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
4130 THEN MRESA_TAC exists_element_in_half_sapace_fan
4131 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
4132 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
4133 ` (v':real^3)`]
4134 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`]
4135 THEN DISCH_TAC
4136 THEN REMOVE_ASSUM_TAC
4137 THEN REWRITE_TAC[EMPTY;IN]
4138 THEN POP_ASSUM MP_TAC 
4139 THEN ASM_REWRITE_TAC[]
4140 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
4141 THEN RESA_TAC
4142 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
4143 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
4144 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`;])
4145 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
4146 THEN POP_ASSUM MP_TAC
4147 THEN POP_ASSUM MP_TAC
4148 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
4149 THEN SET_TAC[]](*5*)](*4*)](*3*);(*2*)
4150
4151
4152
4153 DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
4154 THENL(*3*)[
4155
4156 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
4157 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
4158 THEN DISCH_THEN(LABEL_TAC"MAI")
4159 THEN DISCH_THEN (LABEL_TAC"YEU EM")
4160 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
4161  (&1 - &0 - t3') % x + &0% v'+t3' % w'<=> t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3 `]
4162 THEN MP_TAC(ISPEC`(t3':real)`REAL_MUL_LINV)
4163 THEN RESA_TAC
4164 THEN STRIP_TAC
4165 THEN MP_TAC(SET_RULE`
4166 t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3
4167 ==> (inv (t3'))%(t3' % w' ) = (inv (t3'))%((t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3)
4168 `)
4169 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4170 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`]
4171 THEN REDUCE_VECTOR_TAC
4172 THEN DISCH_TAC
4173 THEN SUBGOAL_THEN `~coplanar{x:real^3,w':real^3,v:real^3,u:real^3}` ASSUME_TAC
4174 THENL(*4*)[
4175
4176  POP_ASSUM MP_TAC
4177 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, w', v, u}= {(--x) +x, (--x) +w', (--x) +v, (--x) +u}`)
4178 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`]
4179 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
4180 THEN DISCH_TAC
4181 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
4182                          (inv t2' * t2) % v +
4183                          (inv t2' * t3) % ((&1 - a) % u + a % w)) -
4184                         x=(inv t2' * t2) % (v-x) +
4185                          (inv t2' * t3) % ((&1 - a) % u + a % w-x)`])
4186 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==>  &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
4187 THEN REMOVE_THEN"MAI" MP_TAC
4188 THEN DISCH_TAC
4189 THEN REMOVE_ASSUM_TAC
4190 THEN RESA_TAC
4191 THEN POP_ASSUM MP_TAC
4192 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
4193 THEN RESA_TAC
4194 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
4195 THEN RESA_TAC
4196 THEN STRIP_TAC
4197 THEN MP_TAC(SET_RULE`
4198 t2 + t3 = &1 - t1:real
4199 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
4200 `)
4201 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4202 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
4203 THEN STRIP_TAC
4204 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
4205 THEN RESA_TAC
4206 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
4207 THEN RESA_TAC
4208 THEN MRESA_TAC REAL_LT_MUL[`t3':real`;`inv (&1- t1):real`]
4209 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
4210 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
4211 THEN MP_TAC(REAL_ARITH`&0< (t3') * inv (&1- t1) ==> ~((t3')* inv(&1- t1)= &0)`)
4212 THEN RESA_TAC
4213 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
4214 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`]
4215 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
4216 THEN REDUCE_VECTOR_TAC
4217 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+E%(C+D))=A%B+(A*E)%(C+D)`;
4218 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
4219 THEN REDUCE_ARITH_TAC
4220 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`]
4221 THEN DISCH_TAC
4222 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
4223 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
4224 THEN POP_ASSUM MP_TAC
4225 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4226 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}`)
4227 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`]
4228 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
4229 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4230 THEN DISCH_TAC
4231 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`]
4232 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
4233 THEN POP_ASSUM MP_TAC
4234 THEN REWRITE_TAC[VECTOR_ARITH`
4235 (&1 - inv (&1 - t1) * t3) % (v - x) +
4236                         (inv (&1 - t1) * t3) % (((&1 - a) % u + a % w) - x)=
4237 (&1 - inv (&1 - t1) * t3) % (v - x) +
4238                             (inv (&1 - t1) * t3) % ((&1 - a) % u + a % w - x)`];(*4*)
4239
4240
4241 POP_ASSUM MP_TAC
4242 THEN POP_ASSUM MP_TAC
4243 THEN DISCH_THEN (LABEL_TAC"DICH")
4244 THEN DISCH_TAC
4245 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
4246 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
4247 THEN RESA_TAC
4248 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
4249 THEN RESA_TAC
4250 THEN MRESA1_TAC REAL_LT_INV`t3':real`
4251 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
4252 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
4253 THEN SUBGOAL_THEN `(w':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
4254 THENL[(*5*)
4255
4256 ASM_REWRITE_TAC[IN_ELIM_THM]
4257 THEN EXISTS_TAC`(&1 - inv t3' * t2 - inv t3' * t3:real)`
4258 THEN EXISTS_TAC`inv t3' * t2:real`
4259 THEN EXISTS_TAC`(inv t3' * t3:real)`
4260 THEN ASM_REWRITE_TAC[]
4261 THEN REAL_ARITH_TAC;(*5*)
4262
4263 REMOVE_THEN "DICH" MP_TAC
4264 THEN REMOVE_THEN "VUT" MP_TAC
4265 THEN DISCH_TAC
4266 THEN REMOVE_ASSUM_TAC
4267 THEN FIND_ASSUM MP_TAC`{v',w':real^3} IN E`
4268 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4269 THEN DISCH_TAC
4270 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
4271 ` (w':real^3)`]  
4272 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
4273 THEN MRESA_TAC exists_element_in_half_sapace_fan
4274 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
4275 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
4276 ` (w':real^3)`]
4277 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`]
4278 THEN DISCH_TAC
4279 THEN REMOVE_ASSUM_TAC
4280 THEN REWRITE_TAC[EMPTY;IN]
4281 THEN POP_ASSUM MP_TAC 
4282 THEN ASM_REWRITE_TAC[]
4283 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
4284 THEN RESA_TAC
4285 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
4286 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
4287 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`;])
4288 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
4289 THEN POP_ASSUM MP_TAC
4290 THEN POP_ASSUM MP_TAC
4291 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
4292 THEN SET_TAC[]](*5*)](*4*);(*3*)
4293
4294
4295 ASM_REWRITE_TAC[]
4296 THEN DISCH_TAC THEN DISCH_THEN(LABEL_TAC"BO")
4297 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
4298 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
4299 THEN RESA_TAC
4300 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
4301 THEN RESA_TAC
4302 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
4303 THEN RESA_TAC
4304 THEN MRESA1_TAC REAL_LT_INV`t2':real`
4305 THEN MRESA1_TAC REAL_MUL_LINV`t2':real`
4306 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
4307 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
4308 THEN MRESA1_TAC REAL_LT_INV`t3':real`
4309 THEN MRESA1_TAC REAL_MUL_LINV`t3':real`
4310 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
4311 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
4312 THEN SUBGOAL_THEN`(x':real^3) IN aff_gt {x} {v',w'}` ASSUME_TAC
4313 THENL(*4*)[
4314
4315 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
4316 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4317 THEN EXISTS_TAC`t1':real`
4318 THEN EXISTS_TAC`t2':real`
4319 THEN EXISTS_TAC`t3':real`
4320 THEN ASM_REWRITE_TAC[];(*4*)
4321
4322 SUBGOAL_THEN`(x':real^3) IN aff_ge {x} {v',w'}` ASSUME_TAC
4323 THENL(*5*)[
4324
4325 ASM_REWRITE_TAC[IN_ELIM_THM]
4326 THEN EXISTS_TAC`t1':real`
4327 THEN EXISTS_TAC`t2':real`
4328 THEN EXISTS_TAC`t3':real`
4329 THEN ASM_REWRITE_TAC[];(*5*)
4330
4331 SUBGOAL_THEN `(x':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
4332 THENL(*6*)[
4333
4334 ASM_REWRITE_TAC[IN_ELIM_THM]
4335 THEN EXISTS_TAC`t1:real`
4336 THEN EXISTS_TAC`t2:real`
4337 THEN EXISTS_TAC`t3:real`
4338 THEN ASM_REWRITE_TAC[]
4339 THEN REAL_ARITH_TAC;(*6*)
4340
4341 SUBGOAL_THEN `(x':real^3) IN aff_ge {x} {v,va:real^3}` ASSUME_TAC
4342 THENL(*7*)[
4343
4344 MRESA_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`va:real^3`]
4345 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4346 THEN EXISTS_TAC`t1:real`
4347 THEN EXISTS_TAC`t2:real`
4348 THEN EXISTS_TAC`t3:real`
4349 THEN MP_TAC(REAL_ARITH`&0< t2==> &0 <= t2`) THEN RESA_TAC
4350 THEN MP_TAC(REAL_ARITH`&0< t3==> &0 <= t3`) THEN RESA_TAC
4351 THEN ASM_REWRITE_TAC[];(*7*)
4352
4353 FIND_ASSUM MP_TAC`{v',w':real^3} IN E`
4354 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4355 THEN DISCH_TAC
4356 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
4357 ` (w':real^3)`]  
4358 THEN SUBGOAL_THEN `~collinear {x, x', w':real^3}` ASSUME_TAC
4359 THENL(*8*)[
4360
4361 ASM_REWRITE_TAC[collinear1_fan;]
4362 THEN FIND_ASSUM MP_TAC `~((v':real^3) IN aff{x,w'})`
4363 THEN MATCH_MP_TAC MONO_NOT
4364 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
4365 THEN STRIP_TAC
4366 THEN POP_ASSUM MP_TAC
4367 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % w'
4368 <=> t2' % v' = (u'-t1') % x + (v''-t3') % w'`]
4369 THEN STRIP_TAC
4370 THEN MP_TAC(SET_RULE`
4371 t2' % v' = (u'-t1') % x + (v''-t3') % w':real^3
4372 ==> (inv ( t2'))%(t2' % v') = (inv (t2'))%((u'-t1') % x + (v''-t3') % w')
4373 `)
4374 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4375 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4376 THEN REDUCE_VECTOR_TAC
4377 THEN STRIP_TAC
4378 THEN EXISTS_TAC `(inv t2' * (u' - t1':real))`
4379 THEN EXISTS_TAC `(inv t2' * (v'' - t3':real))`
4380 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*)
4381
4382
4383
4384
4385 SUBGOAL_THEN `~collinear {x, x', v':real^3}` ASSUME_TAC
4386 THENL(*9*)[
4387 ASM_REWRITE_TAC[collinear1_fan;]
4388 THEN FIND_ASSUM MP_TAC `~((w':real^3) IN aff{x,v'})`
4389 THEN MATCH_MP_TAC MONO_NOT
4390 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
4391 THEN STRIP_TAC
4392 THEN POP_ASSUM MP_TAC
4393 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
4394 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
4395 THEN STRIP_TAC
4396 THEN MP_TAC(SET_RULE`
4397 t3' % w' = (u'-t1') % x + (v''-t2') % v':real^3
4398 ==> (inv ( t3'))%(t3' % w') = (inv (t3'))%((u'-t1') % x + (v''-t2') % v')
4399 `)
4400 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4401 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4402 THEN REDUCE_VECTOR_TAC
4403 THEN STRIP_TAC
4404 THEN EXISTS_TAC `(inv t3' * (u' - t1':real))`
4405 THEN EXISTS_TAC `(inv t3' * (v'' - t2':real))`
4406 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*)
4407
4408
4409
4410
4411 SUBGOAL_THEN`~collinear {x, x', va:real^3}` ASSUME_TAC
4412 THENL(*10*)[
4413 REMOVE_THEN "BO" MP_TAC
4414 THEN DISCH_TAC THEN REMOVE_ASSUM_TAC
4415 THEN ASM_REWRITE_TAC[collinear1_fan;]
4416 THEN FIND_ASSUM MP_TAC`~(va IN aff {x, v:real^3})`
4417 THEN MATCH_MP_TAC MONO_NOT
4418 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4419 THEN STRIP_TAC
4420 THEN POP_ASSUM MP_TAC
4421 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % (va) =
4422       u' % x + v' % (va)<=>
4423 (&1-(t1+t2+t3)) % x  + (v'-t3) % (va-x) =
4424       (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
4425 THEN REDUCE_VECTOR_TAC
4426 THEN DISJ_CASES_TAC(REAL_ARITH`(v'' - t3 = &0) \/ ~(v'' - (t3:real)= &0)`)
4427 THENL(*11*)[
4428
4429 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
4430 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
4431 THEN RESA_TAC
4432 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];(*11*)
4433
4434 MRESA1_TAC REAL_MUL_LINV `(v''-t3:real)`
4435 THEN STRIP_TAC
4436 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))`)
4437 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
4438 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
4439 THEN REWRITE_TAC[VECTOR_ARITH`&1 % (va - x) = (inv (v' - t3) * t2) % (v - x)<=>
4440 va  = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
4441 THEN STRIP_TAC
4442 THEN EXISTS_TAC`&1-(inv (v'' - t3) * (t2:real))`
4443 THEN EXISTS_TAC`(inv (v'' - t3) * (t2:real))`
4444 THEN ASM_REWRITE_TAC[]
4445 THEN REAL_ARITH_TAC](*11*);(*10*)
4446
4447
4448 SUBGOAL_THEN `~collinear {x, x', v:real^3}` ASSUME_TAC
4449 THENL(*11*)[
4450 REMOVE_THEN "BO" MP_TAC
4451 THEN DISCH_TAC
4452 THEN REMOVE_ASSUM_TAC
4453 THEN ASM_REWRITE_TAC[collinear1_fan]
4454 THEN FIND_ASSUM MP_TAC `~(va IN aff {x, v:real^3})`
4455 THEN MATCH_MP_TAC MONO_NOT
4456 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
4457 THEN STRIP_TAC
4458 THEN POP_ASSUM MP_TAC
4459 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
4460 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
4461 THEN MP_TAC(REAL_ARITH`&0< t3 ==> ~(t3= &0)`)
4462 THEN RESA_TAC
4463 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
4464 THEN STRIP_TAC
4465 THEN MP_TAC(SET_RULE`
4466 t3 % va = (u'-t1) % x + (v''-t2) % v:real^3
4467 ==> (inv ( t3))%(t3 % va) = (inv (t3))%((u'-t1) % x + (v''-t2) % v)
4468 `)
4469 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4470 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4471 THEN REDUCE_VECTOR_TAC
4472 THEN STRIP_TAC
4473 THEN EXISTS_TAC `(inv t3 * (u' - t1:real))`
4474 THEN EXISTS_TAC `(inv t3 * (v'' - t2:real))`
4475 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*)
4476
4477 ABBREV_TAC`an=t1' % x + t2' % v' + t3' % w':real^3`
4478 THEN REMOVE_THEN "VUT1" MP_TAC
4479 THEN REMOVE_THEN "VUT1" MP_TAC
4480 THEN REMOVE_THEN "BO" MP_TAC
4481 THEN REMOVE_THEN "VUT" MP_TAC
4482 THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC
4483 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4484 THEN DISJ_CASES_TAC(SET_RULE`(&0 < azim x (x':real^3) v w' /\
4485       azim x (x') v w' < pi)\/ ~(&0 < azim x (x') v w' /\
4486       azim x (x') v w' < pi)`)
4487
4488 THENL(*12*)[
4489
4490 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`]
4491 THEN REWRITE_TAC[EMPTY;IN]
4492 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
4493 THEN RESA_TAC
4494 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
4495 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
4496 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`;])
4497 THEN MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
4498 THEN POP_ASSUM MP_TAC
4499 THEN POP_ASSUM MP_TAC
4500 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4501 THEN POP_ASSUM MP_TAC
4502 THEN FIND_ASSUM MP_TAC`{v',w'} IN (E:(real^3->bool)->bool)`
4503 THEN SET_TAC[];(*12*)
4504
4505 ASSUME_TAC(ISPECL[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]azim)
4506 THEN ASSUME_TAC(PI_WORKS)
4507 THEN MP_TAC(REAL_ARITH`~(&0 < azim x x' v w' /\ azim x x' v w' < pi)/\
4508 &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) `)
4509 THEN ASM_REWRITE_TAC[]
4510 THEN STRIP_TAC
4511 THENL(*13*)(*3SUBGOAL*)[
4512
4513 POP_ASSUM MP_TAC
4514 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
4515 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
4516 THEN DISCH_TAC
4517 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'`)
4518 THEN RESA_TAC
4519 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
4520 THEN POP_ASSUM MP_TAC
4521 THEN REMOVE_ASSUM_TAC
4522 THEN POP_ASSUM MP_TAC
4523 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
4524 THEN DISCH_TAC THEN DISCH_TAC
4525 THEN MP_TAC(REAL_ARITH`pi < azim x x' v w' /\ azim x x' v w' = azim x x' v v' + pi
4526 /\  azim x x' v w' < &2 * pi==> &0 <azim x x' v v' /\ azim x x' v v' < pi`)
4527 THEN RESA_TAC
4528 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`]
4529 THEN REWRITE_TAC[EMPTY;IN]
4530 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
4531 THEN RESA_TAC
4532 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
4533 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
4534 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`;])
4535 THEN SUBGOAL_THEN ` aff_ge {x} {w', v':real^3}=aff_ge {x} {v', w'}` ASSUME_TAC
4536 THENL(*14*)[
4537 REWRITE_TAC[SET_RULE`{A,B}={B,A}`];(*14*)
4538
4539 MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`w':real^3`;`v':real^3`;`x':real^3`]
4540 THEN POP_ASSUM MP_TAC
4541 THEN REMOVE_ASSUM_TAC 
4542 THEN POP_ASSUM MP_TAC
4543 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4544 THEN POP_ASSUM MP_TAC
4545 THEN FIND_ASSUM MP_TAC`{v',w'} IN (E:(real^3->bool)->bool)`
4546 THEN SET_TAC[]](*14*);(*13*)
4547
4548 MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
4549 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
4550 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
4551 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
4552 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,va:real^3}\/ ~(w' IN aff_gt {x} {v,va:real^3})`)
4553 THENL(*14*)[
4554 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
4555 THEN POP_ASSUM MP_TAC
4556 THEN POP_ASSUM MP_TAC
4557 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
4558 THEN DISCH_TAC
4559 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
4560  THEN ASSUME_TAC(th))
4561 THEN STRIP_TAC 
4562 THEN POP_ASSUM MP_TAC
4563 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
4564  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
4565 THEN REDUCE_VECTOR_TAC
4566 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
4567 THEN RESA_TAC
4568 THEN POP_ASSUM MP_TAC
4569 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
4570 THEN RESA_TAC
4571 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
4572 THEN RESA_TAC
4573 THEN STRIP_TAC
4574 THEN MP_TAC(SET_RULE`
4575 t2'' + t3'' = &1 - t1'':real
4576 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
4577 `)
4578 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4579 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
4580 THEN STRIP_TAC
4581 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
4582 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
4583 THEN RESA_TAC
4584 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
4585 THEN RESA_TAC
4586 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
4587 THEN STRIP_TAC
4588 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`]
4589 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
4590 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
4591 THEN POP_ASSUM MP_TAC
4592 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4593 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}`)
4594 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`]
4595 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
4596 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4597 THEN DISCH_TAC
4598 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`]
4599 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)`])
4600 THEN POP_ASSUM MP_TAC
4601 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
4602 [VECTOR_ARITH`&1 %A=A`]
4603 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
4604 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`]
4605 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
4606 THEN DISCH_TAC
4607 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
4608 THEN MRESA_TAC exists_element_in_half_sapace_fan
4609 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
4610 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
4611 ` (w':real^3)`]
4612 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`]
4613 THEN REWRITE_TAC[EMPTY;IN]
4614 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
4615 THEN RESA_TAC
4616 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
4617 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
4618 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`;])
4619 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
4620 THEN POP_ASSUM MP_TAC
4621 THEN POP_ASSUM MP_TAC
4622 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4623 THEN POP_ASSUM MP_TAC
4624 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
4625 THEN SET_TAC[];(*14*)
4626
4627 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,va:real^3}\/ ~(v' IN aff_gt {x} {v,va:real^3})`)
4628 THENL(*15*)[
4629
4630 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
4631 THEN POP_ASSUM MP_TAC
4632 THEN POP_ASSUM MP_TAC
4633 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
4634 THEN DISCH_TAC
4635 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
4636  THEN ASSUME_TAC(th))
4637 THEN STRIP_TAC 
4638 THEN POP_ASSUM MP_TAC
4639 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
4640  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
4641 THEN REDUCE_VECTOR_TAC
4642 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
4643 THEN RESA_TAC
4644 THEN POP_ASSUM MP_TAC
4645 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
4646 THEN RESA_TAC
4647 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
4648 THEN RESA_TAC
4649 THEN STRIP_TAC
4650 THEN MP_TAC(SET_RULE`
4651 t2'' + t3'' = &1 - t1'':real
4652 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
4653 `)
4654 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4655 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
4656 THEN STRIP_TAC
4657 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
4658 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
4659 THEN RESA_TAC
4660 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
4661 THEN RESA_TAC
4662 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
4663 THEN STRIP_TAC
4664 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`]
4665 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
4666 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
4667 THEN POP_ASSUM MP_TAC
4668 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4669 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}`)
4670 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`]
4671 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
4672 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4673 THEN DISCH_TAC
4674 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`]
4675 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)`])
4676 THEN POP_ASSUM MP_TAC
4677 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
4678 [VECTOR_ARITH`&1 %A=A`]
4679 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
4680 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`]
4681 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
4682 THEN DISCH_TAC
4683 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
4684 THEN MRESA_TAC exists_element_in_half_sapace_fan
4685 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
4686 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
4687 ` (v':real^3)`]
4688 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`]
4689 THEN REWRITE_TAC[EMPTY;IN]
4690 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
4691 THEN RESA_TAC
4692 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
4693 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
4694 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`;])
4695 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
4696 THEN POP_ASSUM MP_TAC
4697 THEN POP_ASSUM MP_TAC
4698 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4699 THEN POP_ASSUM MP_TAC
4700 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
4701 THEN SET_TAC[];(*15*)
4702
4703 SUBGOAL_THEN`~(w' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
4704 THENL(*16*)[
4705 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4706 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`va:real^3`;`x':real^3`]
4707 THEN POP_ASSUM MP_TAC
4708 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4709 THEN ASM_REWRITE_TAC[]
4710 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
4711 THEN SET_TAC[];(*16*)
4712
4713 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`] decomposition_planar_by_angle_fan)
4714 THEN ASM_REWRITE_TAC[]
4715 THEN STRIP_TAC
4716 THENL(*17*)[
4717 MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
4718 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'}
4719 ==>v IN aff_ge {x} {v', w':real^3}`)
4720 THEN RESA_TAC
4721 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)
4722 THEN ASM_REWRITE_TAC[]
4723 THEN STRIP_TAC
4724 THENL(*18*)[
4725 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
4726 THEN POP_ASSUM MP_TAC
4727 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
4728 THEN MP_TAC(PI_WORKS)
4729 THEN REAL_ARITH_TAC;(*18*)
4730
4731 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
4732 THEN POP_ASSUM MP_TAC
4733 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
4734 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
4735 THEN DISCH_TAC
4736 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
4737 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
4738 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`v':real^3`]
4739 THEN POP_ASSUM MP_TAC
4740 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
4741 THEN DISCH_TAC
4742 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`v':real^3`]
4743 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
4744 THEN ASM_REWRITE_TAC[]
4745 THEN STRIP_TAC
4746 THENL(*19*)[
4747 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
4748 THEN ASM_TAC THEN SET_TAC[];(*19*)
4749
4750 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
4751 THEN POP_ASSUM MP_TAC
4752 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
4753 THEN ASM_REWRITE_TAC[]
4754 THEN POP_ASSUM MP_TAC
4755 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4756 THEN STRIP_TAC THEN STRIP_TAC
4757 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'}
4758 ==>va IN aff_ge {x} {v', w':real^3}`)
4759 THEN RESA_TAC
4760 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
4761 THENL(*20*)[
4762
4763 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4764 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
4765 THEN EXISTS_TAC`&0`
4766 THEN EXISTS_TAC`&1 -a:real`
4767 THEN EXISTS_TAC`a:real`
4768 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
4769 THEN RESA_TAC
4770 THEN ASM_REWRITE_TAC[]
4771 THEN REDUCE_VECTOR_TAC
4772 THEN REAL_ARITH_TAC;(*20*)
4773
4774
4775 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w} 
4776 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
4777 THEN RESA_TAC
4778 THEN POP_ASSUM MP_TAC
4779 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4780 THEN REWRITE_TAC[FAN;fan7]
4781 THEN STRIP_TAC
4782 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th)) 
4783   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
4784 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
4785 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
4786 THENL(*21*)[
4787
4788 DISCH_TAC
4789 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4790 THEN REMOVE_ASSUM_TAC
4791 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
4792 THEN ASM_REWRITE_TAC[]
4793 THEN STRIP_TAC
4794 THEN FIND_ASSUM MP_TAC `v IN aff_ge {x} {v', w':real^3}`
4795 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
4796 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
4797 THEN STRIP_TAC
4798 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4799 THEN POP_ASSUM MP_TAC
4800 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4801 THEN ASM_REWRITE_TAC[]
4802 THEN DISCH_TAC
4803 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4804 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`]
4805 THEN POP_ASSUM MP_TAC
4806 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4807 THEN POP_ASSUM MP_TAC
4808 THEN SET_TAC[];(*21*)
4809
4810
4811 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
4812 THEN RESA_TAC
4813 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} `)
4814 THEN ASM_REWRITE_TAC[]
4815 THEN STRIP_TAC
4816 THENL(*22*)[
4817
4818 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)`]
4819 THEN STRIP_TAC
4820 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
4821 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}`)
4822 THEN RESA_TAC
4823 THEN REWRITE_TAC[IN;EMPTY]
4824 THEN POP_ASSUM MP_TAC
4825 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4826 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4827 THEN POP_ASSUM MP_TAC
4828 THEN MATCH_MP_TAC MONO_NOT
4829 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4830 THEN STRIP_TAC
4831 THEN POP_ASSUM MP_TAC
4832 THEN EXPAND_TAC"va"
4833 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
4834 <=> a % w = u' % x + (v''+a- &1) % u`]
4835 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
4836 THEN STRIP_TAC
4837 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)`)
4838 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4839 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4840 THEN REDUCE_VECTOR_TAC
4841 THEN STRIP_TAC
4842 THEN EXISTS_TAC`(inv a * u'):real`
4843 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
4844 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*)
4845
4846 STRIP_TAC
4847 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
4848 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4849 THEN STRIP_TAC
4850 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
4851 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)`]
4852 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
4853 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}`)
4854 THEN RESA_TAC
4855 THEN REWRITE_TAC[IN;EMPTY]
4856 THEN POP_ASSUM MP_TAC 
4857 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
4858 THEN REWRITE_TAC[]
4859 THEN MATCH_MP_TAC MONO_NOT
4860 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4861 THEN STRIP_TAC
4862 THEN POP_ASSUM MP_TAC
4863 THEN EXPAND_TAC"va"
4864 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
4865 <=> (&1-a )% u = u' % x + (v''-a) % w`]
4866 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
4867 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
4868 THEN STRIP_TAC
4869 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)`)
4870 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4871 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4872 THEN REDUCE_VECTOR_TAC
4873 THEN STRIP_TAC
4874 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
4875 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
4876 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*)
4877
4878
4879
4880
4881 POP_ASSUM MP_TAC
4882 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4883 THEN DISCH_TAC
4884 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
4885 THEN POP_ASSUM MP_TAC
4886 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4887 THEN ASM_REWRITE_TAC[]
4888 THEN DISCH_TAC
4889 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}`)
4890 THEN RESA_TAC
4891 THEN POP_ASSUM MP_TAC
4892 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4893 THEN POP_ASSUM MP_TAC
4894 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
4895 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
4896 THEN STRIP_TAC
4897 THEN ASM_REWRITE_TAC[]
4898 THEN STRIP_TAC
4899 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)
4900 THEN ASM_REWRITE_TAC[]
4901 THEN STRIP_TAC
4902 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
4903 THEN DISCH_TAC
4904 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
4905 THEN SUBGOAL_THEN`v IN aff_ge {x} {v', w':real^3}`ASSUME_TAC
4906 THENL(*18*)[
4907 POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];(*18*)
4908 POP_ASSUM MP_TAC
4909 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4910 THEN POP_ASSUM MP_TAC
4911 THEN DISCH_THEN (LABEL_TAC"NHAT")
4912 THEN DISCH_TAC
4913 THEN REMOVE_THEN "NHAT" MP_TAC
4914 THEN DISCH_TAC
4915 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
4916 THEN POP_ASSUM MP_TAC
4917 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
4918 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
4919 THEN DISCH_TAC
4920 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
4921 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
4922 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`v':real^3`]
4923 THEN POP_ASSUM MP_TAC
4924 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
4925 THEN DISCH_TAC
4926 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`v':real^3`]
4927 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
4928 THEN ASM_REWRITE_TAC[]
4929 THEN STRIP_TAC
4930 THENL(*19*)[
4931
4932 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
4933 THEN ASM_TAC THEN SET_TAC[];(*19*)
4934
4935 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
4936 THEN POP_ASSUM MP_TAC
4937 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
4938 THEN ASM_REWRITE_TAC[]
4939 THEN POP_ASSUM MP_TAC
4940 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4941 THEN STRIP_TAC THEN STRIP_TAC
4942 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'}
4943 ==>va IN aff_ge {x} {v', w':real^3}`)
4944 THEN RESA_TAC
4945 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
4946 THENL(*20*)[
4947
4948 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4949 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
4950 THEN EXISTS_TAC`&0`
4951 THEN EXISTS_TAC`&1 -a:real`
4952 THEN EXISTS_TAC`a:real`
4953 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
4954 THEN RESA_TAC
4955 THEN ASM_REWRITE_TAC[]
4956 THEN REDUCE_VECTOR_TAC
4957 THEN REAL_ARITH_TAC;(*20*)
4958
4959 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w} 
4960 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
4961 THEN RESA_TAC
4962 THEN POP_ASSUM MP_TAC
4963 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4964 THEN REWRITE_TAC[FAN;fan7]
4965 THEN STRIP_TAC
4966 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th)) 
4967   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
4968 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
4969 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
4970 THENL(*21*)[
4971
4972 DISCH_TAC
4973 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4974 THEN REMOVE_ASSUM_TAC
4975 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
4976 THEN ASM_REWRITE_TAC[]
4977 THEN STRIP_TAC
4978 THEN FIND_ASSUM MP_TAC `v IN aff_ge {x} {v', w':real^3}`
4979 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
4980 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
4981 THEN STRIP_TAC
4982 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4983 THEN POP_ASSUM MP_TAC
4984 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4985 THEN ASM_REWRITE_TAC[]
4986 THEN DISCH_TAC
4987 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4988 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`]
4989 THEN POP_ASSUM MP_TAC
4990 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4991 THEN POP_ASSUM MP_TAC
4992 THEN SET_TAC[];(*21*)
4993
4994 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
4995 THEN RESA_TAC
4996 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} `)
4997 THEN ASM_REWRITE_TAC[]
4998 THEN STRIP_TAC
4999 THENL(*22*)[
5000
5001 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)`]
5002 THEN STRIP_TAC
5003 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
5004 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}`)
5005 THEN RESA_TAC
5006 THEN REWRITE_TAC[IN;EMPTY]
5007 THEN POP_ASSUM MP_TAC
5008 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
5009 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5010 THEN POP_ASSUM MP_TAC
5011 THEN MATCH_MP_TAC MONO_NOT
5012 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5013 THEN STRIP_TAC
5014 THEN POP_ASSUM MP_TAC
5015 THEN EXPAND_TAC"va"
5016 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
5017 <=> a % w = u' % x + (v''+a- &1) % u`]
5018 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
5019 THEN STRIP_TAC
5020 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)`)
5021 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5022 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5023 THEN REDUCE_VECTOR_TAC
5024 THEN STRIP_TAC
5025 THEN EXISTS_TAC`(inv a * u'):real`
5026 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
5027 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*)
5028
5029
5030 STRIP_TAC
5031 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
5032 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5033 THEN STRIP_TAC
5034 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
5035 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)`]
5036 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
5037 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}`)
5038 THEN RESA_TAC
5039 THEN REWRITE_TAC[IN;EMPTY]
5040 THEN POP_ASSUM MP_TAC 
5041 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
5042 THEN REWRITE_TAC[]
5043 THEN MATCH_MP_TAC MONO_NOT
5044 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5045 THEN STRIP_TAC
5046 THEN POP_ASSUM MP_TAC
5047 THEN EXPAND_TAC"va"
5048 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
5049 <=> (&1-a )% u = u' % x + (v''-a) % w`]
5050 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
5051 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
5052 THEN STRIP_TAC
5053 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)`)
5054 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5055 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5056 THEN REDUCE_VECTOR_TAC
5057 THEN STRIP_TAC
5058 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
5059 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
5060 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*)
5061
5062
5063
5064 POP_ASSUM MP_TAC
5065 THEN DISCH_THEN(LABEL_TAC"CUOI")
5066 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
5067 THEN ASSUME_TAC(REAL_ARITH`pi<= pi`)
5068 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
5069 THEN POP_ASSUM MP_TAC
5070 THEN REWRITE_TAC[REAL_ARITH`A=B+A<=>B= &0`]
5071 THEN DISCH_TAC
5072 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
5073 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
5074 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
5075 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
5076 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,va:real^3}\/ ~(w' IN aff_gt {x} {v,va:real^3})`)
5077 THENL(*14*)[
5078
5079 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
5080 THEN POP_ASSUM MP_TAC
5081 THEN POP_ASSUM MP_TAC
5082 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
5083 THEN DISCH_TAC
5084 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
5085  THEN ASSUME_TAC(th))
5086 THEN STRIP_TAC 
5087 THEN POP_ASSUM MP_TAC
5088 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
5089  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
5090 THEN REDUCE_VECTOR_TAC
5091 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
5092 THEN RESA_TAC
5093 THEN POP_ASSUM MP_TAC
5094 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
5095 THEN RESA_TAC
5096 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
5097 THEN RESA_TAC
5098 THEN STRIP_TAC
5099 THEN MP_TAC(SET_RULE`
5100 t2'' + t3'' = &1 - t1'':real
5101 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
5102 `)
5103 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5104 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
5105 THEN STRIP_TAC
5106 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
5107 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
5108 THEN RESA_TAC
5109 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
5110 THEN RESA_TAC
5111 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
5112 THEN STRIP_TAC
5113 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`]
5114 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
5115 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
5116 THEN POP_ASSUM MP_TAC
5117 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
5118 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}`)
5119 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`]
5120 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
5121 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
5122 THEN DISCH_TAC
5123 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`]
5124 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)`])
5125 THEN POP_ASSUM MP_TAC
5126 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
5127 [VECTOR_ARITH`&1 %A=A`]
5128 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
5129 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`]
5130 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
5131 THEN DISCH_TAC
5132 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
5133 THEN MRESA_TAC exists_element_in_half_sapace_fan
5134 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
5135 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
5136 ` (w':real^3)`]
5137 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`]
5138 THEN REWRITE_TAC[EMPTY;IN]
5139 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
5140 THEN RESA_TAC
5141 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
5142 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
5143 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`;])
5144 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
5145 THEN POP_ASSUM MP_TAC
5146 THEN POP_ASSUM MP_TAC
5147 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5148 THEN POP_ASSUM MP_TAC
5149 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
5150 THEN SET_TAC[];(*14*)
5151
5152 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,va:real^3}\/ ~(v' IN aff_gt {x} {v,va:real^3})`)
5153 THENL(*15*)[
5154
5155 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
5156 THEN POP_ASSUM MP_TAC
5157 THEN POP_ASSUM MP_TAC
5158 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
5159 THEN DISCH_TAC
5160 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
5161  THEN ASSUME_TAC(th))
5162 THEN STRIP_TAC 
5163 THEN POP_ASSUM MP_TAC
5164 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
5165  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
5166 THEN REDUCE_VECTOR_TAC
5167 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
5168 THEN RESA_TAC
5169 THEN POP_ASSUM MP_TAC
5170 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
5171 THEN RESA_TAC
5172 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
5173 THEN RESA_TAC
5174 THEN STRIP_TAC
5175 THEN MP_TAC(SET_RULE`
5176 t2'' + t3'' = &1 - t1'':real
5177 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
5178 `)
5179 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5180 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
5181 THEN STRIP_TAC
5182 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
5183 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
5184 THEN RESA_TAC
5185 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
5186 THEN RESA_TAC
5187 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
5188 THEN STRIP_TAC
5189 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`]
5190 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
5191 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
5192 THEN POP_ASSUM MP_TAC
5193 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
5194 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}`)
5195 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`]
5196 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
5197 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
5198 THEN DISCH_TAC
5199 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`]
5200 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)`])
5201 THEN POP_ASSUM MP_TAC
5202 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
5203 [VECTOR_ARITH`&1 %A=A`]
5204 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
5205 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`]
5206 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
5207 THEN DISCH_TAC
5208 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
5209 THEN MRESA_TAC exists_element_in_half_sapace_fan
5210 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
5211 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
5212 ` (v':real^3)`]
5213 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`]
5214 THEN REWRITE_TAC[EMPTY;IN]
5215 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
5216 THEN RESA_TAC
5217 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
5218 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
5219 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`;])
5220 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
5221 THEN POP_ASSUM MP_TAC
5222 THEN POP_ASSUM MP_TAC
5223 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5224 THEN POP_ASSUM MP_TAC
5225 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
5226 THEN SET_TAC[];(*15*)
5227
5228 SUBGOAL_THEN`~(v' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
5229 THENL(*16*)[
5230 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5231 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`va:real^3`;`x':real^3`]
5232 THEN POP_ASSUM MP_TAC
5233 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
5234 THEN ASM_REWRITE_TAC[]
5235 THEN POP_ASSUM MP_TAC 
5236 THEN SET_TAC[];(*16*)
5237
5238 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`] decomposition_planar_by_angle_fan)
5239 THEN ASM_REWRITE_TAC[]
5240 THEN STRIP_TAC
5241 THENL(*17*)[
5242
5243 MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
5244 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'}
5245 ==>v IN aff_ge {x} {v', w':real^3}`)
5246 THEN RESA_TAC
5247 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)
5248 THEN ASM_REWRITE_TAC[]
5249 THEN STRIP_TAC
5250 THENL(*18*)[
5251  MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
5252 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
5253 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`w':real^3`]
5254 THEN POP_ASSUM MP_TAC
5255 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
5256 THEN DISCH_TAC
5257 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`w':real^3`]
5258 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
5259 THEN ASM_REWRITE_TAC[]
5260 THEN STRIP_TAC
5261 THENL(*19*)[
5262
5263 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
5264 THEN ASM_TAC THEN SET_TAC[];(*19*)
5265
5266 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
5267 THEN ASM_TAC THEN SET_TAC[]](*19*);(*18*)
5268
5269
5270 REMOVE_THEN "CUOI" MP_TAC
5271 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
5272 THEN REWRITE_TAC[AZIM_REFL]
5273 THEN MP_TAC(PI_WORKS)
5274 THEN REAL_ARITH_TAC](*18*);(*17*)
5275
5276 POP_ASSUM MP_TAC
5277 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5278 THEN DISCH_TAC
5279 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
5280 THEN POP_ASSUM MP_TAC
5281 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
5282 THEN ASM_REWRITE_TAC[]
5283 THEN DISCH_TAC
5284 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}`)
5285 THEN RESA_TAC
5286 THEN POP_ASSUM MP_TAC
5287 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5288 THEN POP_ASSUM MP_TAC
5289 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
5290 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
5291 THEN STRIP_TAC
5292 THEN ASM_REWRITE_TAC[]
5293 THEN STRIP_TAC
5294 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)
5295 THEN ASM_REWRITE_TAC[]
5296 THEN STRIP_TAC
5297 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
5298 THEN DISCH_TAC
5299 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
5300 THEN MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
5301 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
5302 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`w':real^3`]
5303 THEN POP_ASSUM MP_TAC
5304 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
5305 THEN DISCH_TAC
5306 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`w':real^3`]
5307 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
5308 THEN ASM_REWRITE_TAC[]
5309 THEN STRIP_TAC
5310 THENL(*18*)[
5311 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
5312 THEN ASM_TAC THEN SET_TAC[];(*18*)
5313
5314
5315 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
5316 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'}
5317 ==>va IN aff_ge {x} {v', w':real^3}`)
5318 THEN RESA_TAC
5319 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
5320 THENL(*19*)[
5321
5322 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
5323 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
5324 THEN EXISTS_TAC`&0`
5325 THEN EXISTS_TAC`&1 -a:real`
5326 THEN EXISTS_TAC`a:real`
5327 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
5328 THEN RESA_TAC
5329 THEN ASM_REWRITE_TAC[]
5330 THEN REDUCE_VECTOR_TAC
5331 THEN REAL_ARITH_TAC;(*19*)
5332
5333 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w} 
5334 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
5335 THEN RESA_TAC
5336 THEN POP_ASSUM MP_TAC
5337 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
5338 THEN REWRITE_TAC[FAN;fan7]
5339 THEN STRIP_TAC
5340 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th)) 
5341   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
5342 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
5343 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
5344 THENL(*20*)[
5345 DISCH_TAC
5346 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
5347 THEN REMOVE_ASSUM_TAC
5348 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
5349 THEN ASM_REWRITE_TAC[]
5350 THEN STRIP_TAC
5351 THEN FIND_ASSUM MP_TAC `v' IN aff_ge {x} {v', w':real^3}`
5352 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
5353 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
5354 THEN STRIP_TAC
5355 THEN FIND_ASSUM MP_TAC `~collinear {x, v, u:real^3}`
5356 THEN FIND_ASSUM MP_TAC `v=v':real^3`
5357 THEN DISCH_TAC
5358 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
5359 THEN DISCH_TAC
5360 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
5361 THEN POP_ASSUM MP_TAC
5362 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
5363 THEN ASM_REWRITE_TAC[]
5364 THEN DISCH_TAC
5365 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
5366 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`]
5367 THEN POP_ASSUM MP_TAC
5368 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
5369 THEN POP_ASSUM MP_TAC
5370 THEN SET_TAC[];(*20*)
5371
5372 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
5373 THEN RESA_TAC
5374 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} `)
5375 THEN ASM_REWRITE_TAC[]
5376 THEN STRIP_TAC
5377 THENL(*21*)[
5378
5379 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)`]
5380 THEN STRIP_TAC
5381 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
5382 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}`)
5383 THEN RESA_TAC
5384 THEN REWRITE_TAC[IN;EMPTY]
5385 THEN POP_ASSUM MP_TAC
5386 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
5387 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5388 THEN POP_ASSUM MP_TAC
5389 THEN MATCH_MP_TAC MONO_NOT
5390 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5391 THEN STRIP_TAC
5392 THEN POP_ASSUM MP_TAC
5393 THEN EXPAND_TAC"va"
5394 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
5395 <=> a % w = u' % x + (v''+a- &1) % u`]
5396 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
5397 THEN STRIP_TAC
5398 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)`)
5399 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5400 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5401 THEN REDUCE_VECTOR_TAC
5402 THEN STRIP_TAC
5403 THEN EXISTS_TAC`(inv a * u'):real`
5404 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
5405 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*)
5406
5407
5408 STRIP_TAC
5409 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
5410 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5411 THEN STRIP_TAC
5412 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
5413 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)`]
5414 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
5415 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}`)
5416 THEN RESA_TAC
5417 THEN REWRITE_TAC[IN;EMPTY]
5418 THEN POP_ASSUM MP_TAC 
5419 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
5420 THEN REWRITE_TAC[]
5421 THEN MATCH_MP_TAC MONO_NOT
5422 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5423 THEN STRIP_TAC
5424 THEN POP_ASSUM MP_TAC
5425 THEN EXPAND_TAC"va"
5426 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
5427 <=> (&1-a )% u = u' % x + (v''-a) % w`]
5428 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
5429 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
5430 THEN STRIP_TAC
5431 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)`)
5432 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5433 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5434 THEN REDUCE_VECTOR_TAC
5435 THEN STRIP_TAC
5436 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
5437 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
5438 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*)]
5439 (*8*)](*7*)](*6*)](*5*)](*4*)](*3*)](*2*);(*1*)
5440
5441 SET_TAC[]]);;
5442
5443
5444
5445
5446 let aff_ge_eq_aff_gt_union_aff_ge=prove(`!(x:real^3) (v:real^3) (w:real^3).
5447 ~collinear {x,v,w}
5448 ==>
5449 aff_ge {x} {v , w} =  (aff_gt {x} {v,w}) UNION (aff_ge {x} {v}) UNION (aff_ge {x} {w})`,
5450
5451 REPEAT STRIP_TAC THEN MRESA_TAC th3 [`x:real^3`;`v:real^3`;`w:real^3`]
5452   THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w:real^3`]AFF_GE_1_2)
5453                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC 
5454                 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w:real^3`]AFF_GT_1_2)
5455                 THEN ASM_REWRITE_TAC[] THEN DISCH_TAC 
5456                 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`]AFF_GE_1_1)
5457                 THEN MP_TAC(ISPECL[`x:real^3`;`w:real^3`]AFF_GE_1_1) THEN RESA_TAC THEN RESA_TAC
5458                 THEN ASM_REWRITE_TAC[EXTENSION;UNION;IN_ELIM_THM]
5459 THEN GEN_TAC THEN EQ_TAC
5460 THENL[STRIP_TAC
5461 THEN MP_TAC(REAL_ARITH`&0<= t2/\ &0<=t3==> (t2= &0)\/ (t3= &0)\/ (&0<t2 /\ &0<t3)`)
5462 THEN RESA_TAC
5463 THENL[
5464 SUBGOAL_THEN `(?t1' t2'.
5465       &0 <= t2' /\
5466       t1' + t2' = &1 /\
5467       t1 % x + &0 % v + t3 % w = t1' % x + t2' % w:real^3)`ASSUME_TAC
5468 THENL[
5469 EXISTS_TAC`t1:real`
5470 THEN EXISTS_TAC`t3:real`
5471 THEN REDUCE_VECTOR_TAC
5472 THEN ASM_REWRITE_TAC[]
5473 THEN ASM_TAC THEN REAL_ARITH_TAC;
5474 POP_ASSUM MP_TAC THEN SET_TAC[]];
5475
5476 SUBGOAL_THEN `(?t1' t2'.
5477       &0 <= t2' /\
5478       t1' + t2' = &1 /\
5479       t1 % x + t2 % v + &0 % w = t1' % x + t2' % v:real^3)`ASSUME_TAC
5480 THENL[
5481 EXISTS_TAC`t1:real`
5482 THEN EXISTS_TAC`t2:real`
5483 THEN REDUCE_VECTOR_TAC
5484 THEN ASM_REWRITE_TAC[]
5485 THEN ASM_TAC THEN REAL_ARITH_TAC;
5486 POP_ASSUM MP_TAC THEN SET_TAC[]];
5487
5488 SUBGOAL_THEN `(?t1' t2' t3'.
5489       &0 < t2' /\
5490       &0 < t3' /\
5491       t1' + t2' + t3' = &1 /\
5492       t1 % x + t2 % v + t3 % w = t1' % x + t2' % v + t3' % w:real^3)`ASSUME_TAC
5493 THENL[
5494 EXISTS_TAC`t1:real`
5495 THEN EXISTS_TAC`t2:real`
5496 THEN EXISTS_TAC`t3:real`
5497 THEN REDUCE_VECTOR_TAC
5498 THEN ASM_REWRITE_TAC[]
5499 THEN ASM_TAC THEN REAL_ARITH_TAC;
5500 POP_ASSUM MP_TAC THEN SET_TAC[]]];
5501
5502 STRIP_TAC
5503 THENL[
5504 EXISTS_TAC`t1:real`
5505 THEN EXISTS_TAC`t2:real`
5506 THEN EXISTS_TAC`t3:real`
5507 THEN REDUCE_VECTOR_TAC
5508 THEN ASM_REWRITE_TAC[]
5509 THEN ASM_TAC THEN REAL_ARITH_TAC;
5510 EXISTS_TAC`t1:real`
5511 THEN EXISTS_TAC`t2:real`
5512 THEN EXISTS_TAC`&0:real`
5513 THEN REDUCE_VECTOR_TAC
5514 THEN ASM_REWRITE_TAC[]
5515 THEN ASM_TAC THEN REAL_ARITH_TAC;
5516 EXISTS_TAC`t1:real`
5517 THEN EXISTS_TAC`&0:real`
5518 THEN EXISTS_TAC`t2:real`
5519 THEN REDUCE_VECTOR_TAC
5520 THEN ASM_REWRITE_TAC[]
5521 THEN ASM_TAC THEN REAL_ARITH_TAC]]);;
5522
5523 let AFFINE_HULL_1=prove(`!a. affine hull {a} ={u % a| u = &1}`, 
5524   SIMP_TAC[AFFINE_HULL_FINITE; FINITE_INSERT; FINITE_RULES] THEN
5525   SIMP_TAC[AFFINE_HULL_FINITE_STEP; FINITE_INSERT; FINITE_RULES] THEN
5526   REWRITE_TAC[REAL_ARITH `x - y = z:real <=> x = y + z`;
5527               VECTOR_ARITH `x - y = z:real^N <=> x = y + z`] THEN
5528   REWRITE_TAC[VECTOR_ADD_RID; REAL_ADD_RID] THEN SET_TAC[]);;
5529
5530
5531 let aff_ge1_1_subset_aff_ge=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
5532 DISJOINT {x} {v,u} /\ ~(x=v1)
5533 /\ v1 IN aff_ge {x} {v,u}
5534 ==>
5535 aff_ge {x} {v1} SUBSET aff_ge {x} {v,u}`,
5536 REPEAT STRIP_TAC
5537 THEN POP_ASSUM MP_TAC
5538 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
5539 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`v1:real^3`;][IN_ELIM_THM;SUBSET]
5540 THEN REPEAT STRIP_TAC
5541 THEN POP_ASSUM MP_TAC
5542 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % (t1 % x + t2 % v + t3 % u) 
5543 =(t1'+ t2'*t1) % x + (t2'* t2) % v + (t2' * t3 ) % u:real^3`]
5544 THEN STRIP_TAC
5545 THEN EXISTS_TAC`t1' + t2' * t1:real`
5546 THEN EXISTS_TAC`t2' * t2:real`
5547 THEN EXISTS_TAC`t2' * t3:real`
5548 THEN MP_TAC(REAL_ARITH`&0<t2'==> &0<= t2'`)
5549 THEN RESA_TAC
5550 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t2:real`]
5551 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`t3:real`]
5552 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1' + t2' * t1) + t2' * t2 + t2' * t3 =
5553 t1'+t2'*(t1+t2+t3)`; REAL_ARITH`A* &1=A`]
5554 THEN ASM_TAC
5555 THEN REAL_ARITH_TAC);;
5556
5557
5558
5559 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.
5560
5561 FAN(x,V,E) /\ {v,u} INTER {v1,w1}={} /\ {v1,w1} IN E /\ {v,u} IN E /\ {u,w} IN E
5562 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5563 /\ &0 <a /\ a< &1 
5564 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5565       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
5566 ==>
5567 ?h:real.
5568 (&0 < h) 
5569 /\ 
5570 (!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)
5571 ==> h  <= dist(y1,y2) ))`,
5572 REPEAT STRIP_TAC 
5573 THEN POP_ASSUM MP_TAC
5574 THEN DISCH_THEN(LABEL_TAC"EM")
5575 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5576 ` (v:real^3)`]
5577 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5578 ` (v1:real^3)`]
5579 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
5580 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`]
5581
5582 THEN MATCH_MP_TAC( ISPECL [`aff_ge {(x:real^3)} {(v:real^3), ((&1 - a) % u + a % w:real^3)} INTER ballnorm_fan x`; 
5583  `aff_ge {(x:real^3)} {(v1:real^3), (w1:real^3)} INTER ballnorm_fan x`] SEPARATE_CLOSED_COMPACT)
5584 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v:real^3)`;` ((&1 - a) % u + a % w:real^3)`]closed_aff_ge_ballnorm_fan) 
5585 THEN RESA_TAC
5586 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v1:real^3)`;` (w1:real^3)`]compact_aff_ge_ballnorm_fan) THEN RESA_TAC
5587 THEN REMOVE_THEN "EM" MP_TAC
5588 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
5589 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;` (v:real^3)`;`((&1 - a) % u + a % w:real^3)`]
5590 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
5591 THEN REWRITE_TAC[FAN;fan7] 
5592 THEN STRIP_TAC
5593 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(v:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
5594                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
5595 THEN MP_TAC(SET_RULE`(v:real^3) IN V==>(?v'. v' IN V /\ {v} = {v'})`)
5596 THEN REDA_TAC
5597 THEN MP_TAC(SET_RULE`{(v:real^3),u} INTER {v1,w1}={} ==> {v} INTER {v1,w1}={}`)
5598 THEN REDA_TAC
5599 THEN REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1;]
5600 THEN STRIP_TAC THEN SUBGOAL_THEN`(aff_ge {x} {v} INTER aff_ge {x} {v1, w1:real^3}) INTER ballnorm_fan x={}`
5601 ASSUME_TAC
5602 THENL(*1*)[
5603 ASM_REWRITE_TAC[INTER;ballnorm_fan;EXTENSION;IN_ELIM_THM;SET_RULE`(?u. u = &1 /\ x' = u % x)<=> x'= &1 % x`;]
5604 THEN REDUCE_VECTOR_TAC
5605 THEN GEN_TAC THEN EQ_TAC
5606 THENL(*2*)[
5607 STRIP_TAC THEN POP_ASSUM MP_TAC
5608 THEN ASM_REWRITE_TAC[DIST_REFL]
5609 THEN REAL_ARITH_TAC;
5610 SET_TAC[]];
5611
5612 ABBREV_TAC`va=(&1 - a) % u + a % w:real^3`
5613  THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
5614 THENL(*2*)[
5615  MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
5616 THEN EXISTS_TAC`&0`
5617 THEN EXISTS_TAC`&1 -a:real`
5618 THEN EXISTS_TAC`a:real`
5619 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
5620 THEN RESA_TAC
5621 THEN ASM_REWRITE_TAC[]
5622 THEN REDUCE_VECTOR_TAC
5623 THEN REAL_ARITH_TAC;(*2*)
5624
5625 SUBGOAL_THEN`(aff_ge {x} {va} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`
5626 ASSUME_TAC
5627 THENL(*3*)[
5628  MRESA_TAC th3[` (x:real^3)`;`(v:real^3)`;`(va:real^3)`]
5629 THEN MRESA_TAC aff_ge1_1_subset_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`;`va:real^3`]
5630 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
5631 THEN REWRITE_TAC[FAN;fan7] 
5632 THEN STRIP_TAC
5633 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
5634                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
5635 THEN MP_TAC(SET_RULE`{v,u} INTER {v1,w1}={}==> {u,w} INTER {v1,w1} SUBSET {w:real^3}`)
5636 THEN RESA_TAC
5637 THEN STRIP_TAC
5638 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)`]
5639 THEN POP_ASSUM MP_TAC
5640 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
5641 THEN REMOVE_ASSUM_TAC
5642 THEN DISCH_TAC
5643 THEN MP_TAC(SET_RULE`aff_ge {x} {va} SUBSET aff_ge {x} {u, w}/\
5644 aff_ge {x} {u, w} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {w}
5645 ==> aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET  aff_ge {x} {va} INTER aff_ge {x} {w}`)
5646 THEN RESA_TAC
5647 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}`)
5648 THEN ASM_REWRITE_TAC[]
5649 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`va:real^3`;][IN_ELIM_THM;SUBSET;INTER]
5650 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`w:real^3`;][IN_ELIM_THM;SUBSET;IN_SING]
5651 THEN REPEAT STRIP_TAC
5652 THEN POP_ASSUM MP_TAC
5653 THEN ASM_REWRITE_TAC[]
5654 THEN EXPAND_TAC"va"
5655 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % ((&1 - a) % u + a % w) = t1' % x + t2' % w
5656 <=> (t2 *(&1 - a)) % u = (t1'-t1) % x + (t2'- t2*a) % w:real^3`]
5657 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0 < t2:real`)
5658 THEN RES_TAC
5659 THENL(*4*)[
5660 FIND_ASSUM MP_TAC`t1+ t2:real= &1`
5661 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
5662 THEN REDUCE_ARITH_TAC
5663 THEN DISCH_TAC
5664 THEN ASM_REWRITE_TAC[]
5665 THEN REDUCE_VECTOR_TAC;(*4*)
5666
5667 MP_TAC(REAL_ARITH`a< &1==> &0< &1-a:real`) THEN RESA_TAC
5668 THEN MRESA_TAC REAL_LT_MUL[`t2:real`;`&1- a:real`]
5669 THEN MP_TAC(REAL_ARITH` &0< t2*(&1-a)==> ~(t2*(&1-a):real= &0)`) THEN RESA_TAC
5670 THEN MRESA1_TAC REAL_MUL_LINV`t2*(&1-a):real`
5671 THEN MRESA1_TAC REAL_LT_INV`t2*(&1-a):real`
5672 THEN STRIP_TAC
5673 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)`)
5674 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5675 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5676 THEN REDUCE_VECTOR_TAC
5677 THEN STRIP_TAC
5678 THEN SUBGOAL_THEN`u IN aff {x,w:real^3}`ASSUME_TAC
5679 THENL(*5*)[
5680 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5681 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t1' - t1)):real`
5682 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t2' - t2 * a)):real`
5683 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 * (&1 - a)) * (t1' - t1) + inv (t2 * (&1 - a)) * (t2' - t2 * a)
5684 = inv (t2 * (&1 - a)) * ((t1' +t2')- (t1+t2)+ t2*(&1 - a)):real`; REAL_ARITH`&1- &1 + A= A`];(*5*)
5685
5686 FIND_ASSUM MP_TAC `~collinear {x, u, w:real^3}`
5687 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
5688 THEN STRIP_TAC
5689 THEN MRESA_TAC th3[`x:real^3`;`w:real^3`;`u:real^3`]]];(*3*)
5690
5691
5692 SUBGOAL_THEN`(aff_ge {x} {va} INTER aff_ge {x} {v1, w1:real^3}) INTER ballnorm_fan x={}`
5693 ASSUME_TAC
5694 THENL(*4*)[
5695 ASM_REWRITE_TAC[INTER;ballnorm_fan;EXTENSION;IN_ELIM_THM;]
5696 THEN REDUCE_VECTOR_TAC
5697 THEN GEN_TAC THEN EQ_TAC
5698 THENL(*5*)[
5699 STRIP_TAC THEN POP_ASSUM MP_TAC
5700 THEN MP_TAC(SET_RULE`x' IN aff_ge {x} {va} /\ x' IN aff_ge {x} {v1, w1}
5701 /\ aff_ge {x} {va} INTER aff_ge {x} {v1, w1} SUBSET {x}
5702 ==> x' IN {x:real^3}`)
5703 THEN REWRITE_TAC[IN_SING]
5704 THEN RESA_TAC
5705 THEN ASM_REWRITE_TAC[DIST_REFL;]
5706 THEN REAL_ARITH_TAC;(*5*)
5707 SET_TAC[]];
5708 ASM_TAC THEN SET_TAC[]]]]]);;
5709
5710
5711 let properties_inside_collinear0_fan=prove(`!(x:real^3)  (u:real^3) (w:real^3) a:real.
5712 &0 <a /\ a< &1 
5713 /\ ~collinear{x,w,u}
5714 ==> ~collinear{x,(&1 - a) % u + a % w,u}`,
5715
5716 REPEAT STRIP_TAC
5717 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
5718 THEN REWRITE_TAC[collinear1_fan]
5719 THEN STRIP_TAC THEN ASM_REWRITE_TAC[]
5720 THEN REMOVE_ASSUM_TAC
5721 THEN POP_ASSUM MP_TAC 
5722 THEN MATCH_MP_TAC MONO_NOT
5723 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
5724 THEN STRIP_TAC
5725 THEN POP_ASSUM MP_TAC
5726 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v % u
5727 <=> a % w = u' % x + (v+a- &1) % u`]
5728 THEN MP_TAC(REAL_ARITH`&0< a ==> ~(a= &0)`)
5729 THEN RESA_TAC
5730 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
5731 THEN STRIP_TAC
5732 THEN MP_TAC(SET_RULE`
5733 a % w = u' % x + (v+a- &1) % u:real^3
5734 ==> (inv ( a))%(a % w) = (inv (a))%(u' % x + (v+a- &1) % u)
5735 `)
5736 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5737 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5738 THEN REDUCE_VECTOR_TAC
5739 THEN STRIP_TAC
5740 THEN EXISTS_TAC `(inv a * (u':real))`
5741 THEN EXISTS_TAC `(inv a * (v +a - &1 :real))`
5742 THEN ASM_REWRITE_TAC[REAL_ARITH`inv a * (u') + inv a * (v +a - &1)=inv a* (a+ (u'+v) - &1)`;REAL_ARITH`t3'+ &1 - &1=t3'`]);;
5743
5744
5745 let properties_inside_collinear1_fan=prove(`!(x:real^3)  (u:real^3) (w:real^3) a:real.
5746 &0 <a /\ a< &1 
5747 /\ ~collinear{x,w,u}
5748 ==>  ~collinear{x,(&1 - a) % u + a % w,w}`,
5749 REPEAT STRIP_TAC THEN
5750 MRESAL_TAC properties_inside_collinear0_fan[`(x:real^3)`;` (w:real^3)`;`(u:real^3)`;`&1-a:real`][VECTOR_ARITH`(&1 - (&1 - a)) % w + (&1 - a) % u=(&1 - a) % u + a % w`;]
5751 THENL[ ASM_TAC THEN REAL_ARITH_TAC;
5752 STRIP_TAC THENL[ASM_TAC THEN REAL_ARITH_TAC;
5753 ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
5754 THEN ASM_REWRITE_TAC[]]]);;
5755
5756 let properties1_inside_fan=prove(`!x:real^3 u:real^3 w:real^3.
5757 DISJOINT {x} {u,w}
5758 /\ &0<a /\ a< &1
5759 ==> (&1-a)%u+ a%w IN aff_ge {x} {u,w:real^3}`,
5760 REPEAT STRIP_TAC
5761 THEN  MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
5762 THEN EXISTS_TAC`&0`
5763 THEN EXISTS_TAC`&1 -a:real`
5764 THEN EXISTS_TAC`a:real`
5765 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
5766 THEN RESA_TAC
5767 THEN ASM_REWRITE_TAC[]
5768 THEN REDUCE_VECTOR_TAC
5769 THEN REAL_ARITH_TAC);;
5770
5771
5772
5773 let properties_inside_collinear_fan=prove(`!(x:real^3)  (u:real^3) (w:real^3) a:real.
5774 &0 <a /\ a< &1 
5775 /\ ~collinear{x,u,w}
5776 ==>  ~collinear{x,(&1 - a) % u + a % w,u}
5777 /\  ~collinear{x,(&1 - a) % u + a % w,w}`,
5778
5779 MESON_TAC[SET_RULE`{A,B,C}={A,C,B}`;properties_inside_collinear0_fan;properties_inside_collinear1_fan]
5780 );;
5781
5782
5783
5784 let properties_inside_collinear1_fan=prove(`!x:real^3 u:real^3 w:real^3.
5785 ~collinear{x,u,w}
5786 /\ &0<a /\ a< &1
5787 ==>  aff_ge {x} {u} INTER aff_ge {x} {(&1-a)%u+ a%w,w:real^3} SUBSET aff_ge {x} {}`,
5788
5789 REPEAT STRIP_TAC
5790 THEN MRESA_TAC properties_inside_collinear_fan[`(x:real^3)`;`(u:real^3)`;`(w:real^3)`;`a:real`]
5791 THEN MRESA_TAC th3[`(x:real^3)`;`((&1-a)%u+ a%w:real^3)`;`(w:real^3)`]
5792 THEN MRESA_TAC th3[`(x:real^3)`;`u:real^3`;`(w:real^3)`]
5793 THEN  MRESAL_TAC AFF_GE_1_2[`x:real^3`;`(&1-a)%u+ a%w:real^3`;`w:real^3`][IN_ELIM_THM]
5794 THEN  MRESAL_TAC AFF_GE_1_1[`x:real^3`;`u:real^3`][IN_ELIM_THM;INTER;SUBSET;AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1]
5795 THEN REPEAT STRIP_TAC
5796 THEN EXISTS_TAC`&1`
5797 THEN REDUCE_VECTOR_TAC
5798 THEN POP_ASSUM MP_TAC
5799 THEN ASM_REWRITE_TAC[]
5800 THEN POP_ASSUM MP_TAC
5801 THEN MP_TAC(REAL_ARITH`&0<= t2' /\ &0 <= t3==> (t2'= &0 /\ t3 = &0)\/ (&0< t2' \/ &0 <t3)  `)
5802 THEN RESA_TAC
5803 THENL[REDUCE_ARITH_TAC THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
5804 THEN REDUCE_VECTOR_TAC;
5805 STRIP_TAC THEN 
5806 REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % u = t1' % x + t2' % ((&1 - a) % u + a % w) + t3 % w
5807 <=>  (t2'* a + t3) % w = (t1-t1') % x +( t2-t2' * (&1-a))% u   :real^3`]
5808 THEN MRESA_TAC REAL_LT_MUL[`t2':real`;`a:real`]
5809 THEN MP_TAC(REAL_ARITH` &0< t2'*(a) /\ &0<= t3 ==> &0 < t2'*(a)+t3 /\ ~(t2'*(a)+t3:real= &0)`) THEN RESA_TAC
5810 THEN MRESA1_TAC REAL_MUL_LINV`t2'*(a)+t3:real`
5811 THEN MRESA1_TAC REAL_LT_INV`t2'*(a)+t3:real`
5812 THEN STRIP_TAC
5813 THEN MP_TAC(SET_RULE`(t2'* a + t3) % w = (t1-t1') % x +( t2-t2' * (&1-a))% u:real^3
5814  ==> (inv (t2' * a+t3))%((t2'* a + t3) % w) = (inv (t2' * a+t3))%( (t1-t1') % x +( t2-t2' * (&1-a))% u)`)
5815 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5816 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5817 THEN REDUCE_VECTOR_TAC
5818 THEN STRIP_TAC
5819 THEN SUBGOAL_THEN`w IN aff {x,u:real^3}`ASSUME_TAC
5820 THENL[REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5821 THEN EXISTS_TAC`(inv (t2' * a+t3)) * (t1 - t1'):real`
5822 THEN EXISTS_TAC`(inv (t2' *  a+t3) * (t2 - t2' *(&1- a))):real`
5823 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2' * a + t3) * (t1 - t1') + inv (t2' * a + t3) * (t2 - t2' * (&1 - a))
5824 = inv (t2' * a + t3) * ((t2'*a +t3)+(t1 + t2) -(t1'+ t2' +t3) ):real`; REAL_ARITH`A+ &1- &1= A`];
5825 ASM_MESON_TAC[]];
5826
5827 STRIP_TAC THEN 
5828 REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % u = t1' % x + t2' % ((&1 - a) % u + a % w) + t3 % w
5829 <=>  (t2'* a + t3) % w = (t1-t1') % x +( t2-t2' * (&1-a))% u   :real^3`]
5830 THEN MP_TAC(REAL_ARITH`&0<a==> &0<=a`) THEN RESA_TAC
5831 THEN MRESA_TAC REAL_LE_MUL[`t2':real`;`a:real`]
5832 THEN MP_TAC(REAL_ARITH` &0<= t2'*(a) /\ &0< t3 ==> &0 < t2'*(a)+t3 /\ ~(t2'*(a)+t3:real= &0)`) THEN RESA_TAC
5833 THEN MRESA1_TAC REAL_MUL_LINV`t2'*(a)+t3:real`
5834 THEN MRESA1_TAC REAL_LT_INV`t2'*(a)+t3:real`
5835 THEN STRIP_TAC
5836 THEN MP_TAC(SET_RULE`(t2'* a + t3) % w = (t1-t1') % x +( t2-t2' * (&1-a))% u:real^3
5837  ==> (inv (t2' * a+t3))%((t2'* a + t3) % w) = (inv (t2' * a+t3))%( (t1-t1') % x +( t2-t2' * (&1-a))% u)`)
5838 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5839 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5840 THEN REDUCE_VECTOR_TAC
5841 THEN STRIP_TAC
5842 THEN SUBGOAL_THEN`w IN aff {x,u:real^3}`ASSUME_TAC
5843 THENL[
5844 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5845 THEN EXISTS_TAC`(inv (t2' * a+t3)) * (t1 - t1'):real`
5846 THEN EXISTS_TAC`(inv (t2' *  a+t3) * (t2 - t2' *(&1- a))):real`
5847 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2' * a + t3) * (t1 - t1') + inv (t2' * a + t3) * (t2 - t2' * (&1 - a))
5848 = inv (t2' * a + t3) * ((t2'*a +t3)+(t1 + t2) -(t1'+ t2' +t3) ):real`; REAL_ARITH`A+ &1- &1= A`];
5849 ASM_MESON_TAC[]]]);;
5850
5851
5852
5853 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.
5854
5855 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~(u IN {v1,w1})
5856 /\ &0 <a /\ a< &1 
5857 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
5858 REPEAT STRIP_TAC 
5859 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5860 ` (v1:real^3)`]
5861 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
5862 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
5863 THEN ABBREV_TAC`va=(&1 - a) % u + a % w:real^3`
5864 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
5865 THEN MRESA_TAC properties_inside_collinear_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;`a:real`]
5866 THEN MRESA_TAC th3[` (x:real^3)`;`(va:real^3)`;`(u:real^3)`]
5867 THEN MRESA_TAC aff_ge1_1_subset_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`;`va:real^3`]
5868 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
5869 THEN REWRITE_TAC[FAN;fan7] 
5870 THEN STRIP_TAC
5871 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
5872                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
5873 THEN MP_TAC(SET_RULE`~(u IN {v1,w1})==> {u,w} INTER {v1,w1} SUBSET {w:real^3}`)
5874 THEN RESA_TAC
5875 THEN STRIP_TAC
5876 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)`]
5877 THEN POP_ASSUM MP_TAC
5878 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
5879 THEN REMOVE_ASSUM_TAC
5880 THEN DISCH_TAC
5881 THEN MP_TAC(SET_RULE`aff_ge {x} {va} SUBSET aff_ge {x} {u, w}/\
5882 aff_ge {x} {u, w} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {w}
5883 ==> aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET  aff_ge {x} {va} INTER aff_ge {x} {w}`)
5884 THEN RESA_TAC
5885 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}`)
5886 THEN ASM_REWRITE_TAC[]
5887 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`va:real^3`;][IN_ELIM_THM;SUBSET;INTER]
5888 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`w:real^3`;][IN_ELIM_THM;SUBSET;IN_SING]
5889 THEN REPEAT STRIP_TAC
5890 THEN POP_ASSUM MP_TAC
5891 THEN ASM_REWRITE_TAC[]
5892 THEN EXPAND_TAC"va"
5893 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % ((&1 - a) % u + a % w) = t1' % x + t2' % w
5894 <=> (t2 *(&1 - a)) % u = (t1'-t1) % x + (t2'- t2*a) % w:real^3`]
5895 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0 < t2:real`)
5896 THEN RES_TAC
5897 THENL(*4*)[
5898 FIND_ASSUM MP_TAC`t1+ t2:real= &1`
5899 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
5900 THEN REDUCE_ARITH_TAC
5901 THEN DISCH_TAC
5902 THEN ASM_REWRITE_TAC[]
5903 THEN REDUCE_VECTOR_TAC;
5904 MP_TAC(REAL_ARITH`a< &1==> &0< &1-a:real`) THEN RESA_TAC
5905 THEN MRESA_TAC REAL_LT_MUL[`t2:real`;`&1- a:real`]
5906 THEN MP_TAC(REAL_ARITH` &0< t2*(&1-a)==> ~(t2*(&1-a):real= &0)`) THEN RESA_TAC
5907 THEN MRESA1_TAC REAL_MUL_LINV`t2*(&1-a):real`
5908 THEN MRESA1_TAC REAL_LT_INV`t2*(&1-a):real`
5909 THEN STRIP_TAC
5910 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)`)
5911 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5912 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
5913 THEN REDUCE_VECTOR_TAC
5914 THEN STRIP_TAC
5915 THEN SUBGOAL_THEN`u IN aff {x,w:real^3}`ASSUME_TAC
5916 THENL(*5*)[
5917 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
5918 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t1' - t1)):real`
5919 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t2' - t2 * a)):real`
5920 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 * (&1 - a)) * (t1' - t1) + inv (t2 * (&1 - a)) * (t2' - t2 * a)
5921 = inv (t2 * (&1 - a)) * ((t1' +t2')- (t1+t2)+ t2*(&1 - a)):real`; REAL_ARITH`&1- &1 + A= A`];
5922 FIND_ASSUM MP_TAC `~collinear {x, u, w:real^3}`
5923 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
5924 THEN STRIP_TAC
5925 THEN MRESA_TAC th3[`x:real^3`;`w:real^3`;`u:real^3`]]]);;
5926
5927
5928 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.
5929
5930 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~(w IN {v1,w1})
5931 /\ &0 <a /\ a< &1 
5932 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
5933
5934 REPEAT STRIP_TAC
5935 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`;]
5936 THEN POP_ASSUM MATCH_MP_TAC
5937 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5938 THEN ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);;
5939
5940
5941
5942 let GRAPH = prove
5943  (`!E. graph E <=> !e. e IN E ==> e HAS_SIZE 2`,
5944   REWRITE_TAC[graph; IN]);;
5945
5946
5947
5948 let CARD_2_FAN=prove(`!v:A w:A. ~(v=w) 
5949 ==> CARD {v,w}=2`,
5950 REPEAT STRIP_TAC
5951 THEN SUBGOAL_THEN`FINITE {v,w:A}`ASSUME_TAC
5952 THENL[      SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
5953                  IN_INSERT; NOT_IN_EMPTY];
5954
5955 ASSUME_TAC(SET_RULE `v:A IN {v:A,w:A} `)
5956 THEN MP_TAC(ISPECL[`v:A`;`{v:A,w:A}`;]CARD_DELETE)
5957 THEN RESA_TAC
5958 THEN MP_TAC(SET_RULE `v IN {v,w}==>{v:A,w:A} DELETE v PSUBSET {v,w}`)
5959 THEN RESA_TAC
5960 THEN MP_TAC(ISPECL[`{v:A,w:A} DELETE v`;`{v:A,w:A}`]CARD_PSUBSET)
5961 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5962 THEN FIND_ASSUM MP_TAC`FINITE {v:A,w:A}`
5963 THEN DISCH_TAC
5964 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5965 THEN DISCH_TAC
5966 THEN MP_TAC(ARITH_RULE`CARD ({v, w} DELETE v) < CARD {v, w}/\ CARD ({v, w} DELETE v) = CARD {v, w}-1
5967 <=>CARD ({v, w} DELETE v) +1= CARD {v:A, w:A}`)
5968 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5969 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
5970 THEN REWRITE_TAC[ARITH_RULE`A=A`]
5971 THEN DISCH_TAC
5972 THEN SUBGOAL_THEN `w:A IN ({v:A,w:A} DELETE v)` ASSUME_TAC
5973 THENL[
5974 ASM_SET_TAC[];
5975 MP_TAC(ISPECL[`{v:A,w:A}`;`v:A`] FINITE_DELETE)
5976 THEN RESA_TAC
5977 THEN MP_TAC(ISPECL[`w:A`;`{v:A,w:A} DELETE v`;]CARD_DELETE)
5978 THEN RESA_TAC
5979 THEN MP_TAC(SET_RULE `w IN ({v,w} DELETE v)==>{v:A,w:A} DELETE v DELETE w PSUBSET {v,w} DELETE v`)
5980 THEN RESA_TAC
5981 THEN MP_TAC(ISPECL[`{v:A,w:A} DELETE v DELETE w`;`{v:A,w:A} DELETE v`]CARD_PSUBSET)
5982 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5983 THEN FIND_ASSUM MP_TAC`FINITE ({v:A,w:A} DELETE v)`
5984 THEN DISCH_TAC
5985 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5986 THEN DISCH_TAC
5987 THEN MP_TAC(ARITH_RULE`CARD ({v, w} DELETE v DELETE w) < CARD ({v, w} DELETE v)/\ CARD ({v, w} DELETE v DELETE w) = CARD ({v, w} DELETE v)-1
5988 <=>CARD ({v, w} DELETE v DELETE w) +1= CARD ({v:A, w:A} DELETE v)`)
5989 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5990 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
5991 THEN REWRITE_TAC[ARITH_RULE`A=A`]
5992 THEN DISCH_TAC
5993 THEN POP_ASSUM MP_TAC
5994 THEN POP_ASSUM (fun th->REWRITE_TAC[])
5995 THEN POP_ASSUM (fun th->REWRITE_TAC[])
5996 THEN ASSUME_TAC(SET_RULE `{v, w} DELETE v:A DELETE w:A={}`)
5997 THEN POP_ASSUM (fun th->REWRITE_TAC[th;CARD_CLAUSES; ARITH_RULE `0+1=1`])
5998 THEN POP_ASSUM MP_TAC
5999 THEN DISCH_THEN(LABEL_TAC"B")
6000 THEN DISCH_TAC
6001 THEN REMOVE_THEN "B" MP_TAC
6002 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th);ARITH_RULE` 1+1=2`])
6003 THEN SET_TAC[]]]);; 
6004
6005
6006
6007
6008 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.
6009
6010 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~({u,w} = {v1,w1})
6011 /\ &0 <a /\ a< &1 
6012 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
6013
6014 REPEAT STRIP_TAC
6015 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
6016 ` (v1:real^3)`]
6017 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
6018 THEN MP_TAC(SET_RULE` ~(u=w) /\ ~(v1=w1:real^3)==> ({u,w} = {v1,w1}<=> {u,w} SUBSET {v1,w1})`)
6019 THEN ASM_REWRITE_TAC[SET_RULE`~({u,w} SUBSET {v1,w1})<=> ~(w IN {v1,w1})\/ ~( u IN {v1,w1})`]
6020 THEN ASM_TAC THEN SET_TAC[lemma_proof0_fan;lemma_proof1_fan]);;
6021
6022
6023
6024
6025 let remark012_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3)  a:real.
6026 FAN(x,V,E)  /\ {u,w} IN E 
6027 /\ &0 <a /\ a< &1 
6028 ==> ~((&1 - a) % u + a % w IN V)`,
6029 REPEAT STRIP_TAC
6030 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
6031 THEN ABBREV_TAC`v1=(&1 - a) % u + a % w:real^3`
6032 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
6033 THEN REWRITE_TAC[FAN;fan2] 
6034 THEN STRIP_TAC
6035 THEN REMOVE_ASSUM_TAC
6036 THEN POP_ASSUM MP_TAC
6037 THEN MP_TAC(SET_RULE`~(x IN V) /\ v1 IN V==> ~(x=(v1:real^3))`) 
6038 THEN RESA_TAC
6039 THEN MRESA_TAC properties_inside_collinear_fan[`(x:real^3)`;`(u:real^3)`;`(w:real^3)`;`a:real`]
6040 THEN MRESA_TAC th3[`(x:real^3)`;`((&1-a)%u+ a%w:real^3)`;`(w:real^3)`]
6041 THEN MRESA_TAC th3[`(x:real^3)`;`((&1-a)%u+ a%w:real^3)`;`(u:real^3)`]
6042 THEN MP_TAC(SET_RULE`DISJOINT {x, v1} {u}==> ~(v1=u:real^3)`) THEN RESA_TAC
6043 THEN MP_TAC(SET_RULE`DISJOINT {x, v1} {w}==> ~(v1=w:real^3)`) THEN RESA_TAC
6044 THEN MP_TAC(SET_RULE` ~(v1=w:real^3) /\ ~(v1=u:real^3) ==> {u,w} INTER {v1}={}`) THEN RESA_TAC
6045 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
6046 THEN REWRITE_TAC[FAN;fan7] 
6047 THEN STRIP_TAC
6048 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),w}`;`({v1:real^3})`]th))
6049                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
6050 THEN MP_TAC(SET_RULE`(v1:real^3) IN V==>(?v'. v' IN V /\ {v1} = {v'})`)
6051 THEN REDA_TAC
6052 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
6053 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`; `w:real^3`;`v1:real^3`]
6054 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`((&1 - a) % u + a % w:real^3)`;` (w:real^3)`]
6055 THEN MP_TAC(SET_RULE`aff_ge {x} {v1, w} SUBSET aff_ge {x} {u, w}/\ aff_ge {x} {v1, w} =
6056       aff_gt {x} {v1, w} UNION aff_ge {x} {v1} UNION aff_ge {x} {w}
6057 ==> aff_ge {x} {u, w} INTER aff_ge {x} {v1}=aff_ge {x} {v1:real^3}`)
6058 THEN RESA_TAC
6059 THEN STRIP_TAC
6060 THEN SUBGOAL_THEN`v1 IN aff_ge {x} {v1:real^3}` ASSUME_TAC
6061 THENL[MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`v1:real^3`;][IN_ELIM_THM]
6062 THEN EXISTS_TAC`&0` THEN EXISTS_TAC`&1` THEN REDUCE_VECTOR_TAC THEN REAL_ARITH_TAC;
6063 POP_ASSUM MP_TAC
6064 THEN ASM_REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1;SUBSET;IN_SING;IN_ELIM_THM]
6065 THEN STRIP_TAC
6066 THEN POP_ASSUM MP_TAC
6067 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&1 %A=A`]]);;
6068
6069
6070 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.
6071 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~({u,w} = {v1,w1})
6072 /\ &0 <a /\ a< &1 
6073 ==> ~((&1 - a) % u + a % w IN {v1, w1:real^3})`,
6074 REPEAT STRIP_TAC
6075 THEN POP_ASSUM MP_TAC
6076 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w1:real^3`;`v1:real^3`]
6077 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
6078 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6079 THEN STRIP_TAC
6080 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` v1:real^3`;`w1:real^3`]
6081 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`]
6082 THEN ASM_TAC THEN SET_TAC[]);;
6083
6084
6085 let remark0_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) e:real^3->bool.
6086 FAN(x,V,E)/\ e IN E 
6087 ==> {x} INTER e={}`,
6088 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)
6089 THEN RESA_TAC
6090 THEN REMOVE_THEN "A" MP_TAC
6091 THEN RESA_TAC
6092 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
6093 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6094 THEN POP_ASSUM MP_TAC THEN SET_TAC[]);;
6095
6096
6097
6098 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.
6099 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
6100 /\ &0 < azim x u w v /\ azim x u w v < pi
6101 /\ &0<a /\ a< &1
6102 /\ (&1-a)%u+ a%w=ua
6103 /\ ~(ua=w)
6104 /\ ~collinear {x,w,ua}
6105 /\ (aff_gt {x} {v, ua} INTER
6106       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
6107 ==> (!e. e IN (E DELETE {u,w}) ==> aff_ge {x} e INTER aff_ge {x} {ua,w} = aff_ge {x} (e INTER {ua,w}))`,
6108 REPEAT STRIP_TAC
6109 THEN FIND_ASSUM MP_TAC `~collinear {x,w,ua:real^3}`
6110 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
6111 THEN DISCH_TAC
6112 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
6113 THEN FIND_ASSUM MP_TAC `e IN E DELETE {u,w:real^3}`
6114 THEN REWRITE_TAC[DELETE;IN_ELIM_THM;SET_RULE`~(e={u,w:real^3})<=> ~({u,w:real^3}=e)`]
6115 THEN DISCH_TAC
6116 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
6117 THEN RESA_TAC
6118 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`]
6119 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`]
6120 THEN POP_ASSUM MP_TAC
6121 THEN POP_ASSUM MP_TAC
6122 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM(th)])
6123 THEN RESA_TAC THEN RESA_TAC
6124 THEN MP_TAC(SET_RULE`~(ua IN e)==> e INTER {ua,w:real^3} SUBSET {w}`)
6125 THEN RESA_TAC
6126 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
6127 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`; `w:real^3`;`ua:real^3`]
6128 THEN MRESA_TAC th3[` (x:real^3)`;`(ua:real^3)`;`(w:real^3)`]
6129 THEN MRESA_TAC remark0_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`e:real^3->bool`]
6130 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`;]
6131 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}`;]
6132 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}`;]
6133 THEN MATCH_MP_TAC(SET_RULE`C SUBSET A /\ C SUBSET B /\ A INTER B SUBSET C==>A INTER B= C`)
6134 THEN ASM_REWRITE_TAC[]
6135 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
6136 THEN REWRITE_TAC[FAN;fan7] 
6137 THEN STRIP_TAC
6138 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),w}`;`(e:real^3->bool)`]th))
6139                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
6140 THEN DISJ_CASES_TAC(SET_RULE`{u,w:real^3} INTER e= {u,w} \/  ~({u,w} INTER e= {u,w})`)
6141 THENL[MP_TAC(SET_RULE`{u,w} INTER e= {u,w:real^3}==> {u,w} SUBSET e`)
6142 THEN RESA_TAC
6143 THEN POP_ASSUM MP_TAC
6144 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
6145 THEN RESA_TAC
6146 THEN STRIP_TAC
6147 THEN MP_TAC(SET_RULE` ~(u=w:real^3) ==> ({u,w} = {v',w'}<=> {u,w} SUBSET {v',w'})`)
6148 THEN RESA_TAC
6149 THEN ASM_TAC THEN SET_TAC[];
6150
6151 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}= {}`)
6152 THEN RESA_TAC
6153
6154 THENL[
6155 MP_TAC(SET_RULE`e INTER {ua, w} = {w:real^3}==> w IN e`)
6156 THEN RESA_TAC
6157 THEN MP_TAC(SET_RULE`~({u, w} INTER e = {u, w:real^3}) ==> {u, w} INTER e PSUBSET {u, w} `)
6158 THEN RESA_TAC
6159 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} `)
6160 THEN RESA_TAC
6161 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}`;]
6162 THEN POP_ASSUM MP_TAC
6163 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6164 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6165 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6166 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6167 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
6168  THEN SET_TAC[];
6169
6170 MP_TAC(SET_RULE`e INTER {ua, w:real^3} = {}==> ~(w IN e)`)
6171 THEN RESA_TAC
6172 THEN MP_TAC(SET_RULE`~({u, w} INTER e = {u, w:real^3}) ==> {u, w} INTER e PSUBSET {u, w} `)
6173 THEN RESA_TAC
6174 THEN MP_TAC(SET_RULE`{u, w} INTER e PSUBSET {u, w:real^3} /\ ~(w IN e) ==>   {u, w} INTER e SUBSET {u} `)
6175 THEN RESA_TAC
6176 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}`;]
6177 THEN STRIP_TAC
6178 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
6179 THENL[
6180 POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
6181 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6182 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6183 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6184 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6185 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  
6186 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[];
6187 MRESA_TAC properties_inside_collinear1_fan[`x:real^3`;`u:real^3`;`w:real^3`]
6188 THEN POP_ASSUM MP_TAC
6189 THEN POP_ASSUM MP_TAC
6190 THEN SET_TAC[]]]]);;
6191
6192
6193
6194
6195
6196
6197
6198 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.
6199 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
6200 /\ &0<a /\ a < &1 
6201 ==>
6202 ?(h:real). a <h /\  h<= &1
6203 /\ (!t:real. a <= t /\  t<h
6204 ==> (!(s:real). &0 <= s /\ s <= &1 
6205 ==> 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  ))`,
6206 REPEAT STRIP_TAC
6207 THEN REWRITE_TAC[VECTOR_ARITH`((&1-a)%u + a %w)-((&1-t)%u+ t%w)=(t-a)%(u-w):real^3`;NORM_MUL]
6208 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)
6209 THEN RESA_TAC
6210 THEN POP_ASSUM MP_TAC
6211 THEN DISCH_THEN (LABEL_TAC"A")
6212 THEN EXISTS_TAC`min (a+(h:real)*(d:real) *inv(norm(u-w:real^3))) (&1)`
6213 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
6214 ` (u:real^3)`] remark1_fan)
6215 THEN RESA_TAC 
6216 THEN  MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_gl_zero_fan)
6217 THEN RESA_TAC 
6218 THEN MP_TAC(ISPECL[`(h:real)*(d:real)`;`inv(norm(u-w:real^3))`] REAL_LT_MUL)
6219 THEN RESA_TAC
6220 THEN STRIP_TAC
6221 THENL[
6222 MP_TAC(ISPECL[`h:real`;`d:real`] REAL_LT_MUL)
6223 THEN RESA_TAC
6224 THEN ASM_TAC
6225 THEN REAL_ARITH_TAC;
6226 STRIP_TAC
6227 THENL[
6228 REAL_ARITH_TAC;
6229 REPEAT STRIP_TAC
6230 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
6231 THEN RESA_TAC
6232 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
6233 THEN RESA_TAC
6234 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)))`)
6235 THEN ASM_REWRITE_TAC[REAL_ARITH`min (a+h * d * inv (norm (u - w))) (&1)<= &1`]
6236 THEN STRIP_TAC
6237 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
6238 THEN RESA_TAC
6239 THEN REMOVE_THEN "A"(fun th -> MP_TAC(ISPEC`(&1-s)%v+s%((&1-t)%u+ t%w):real^3`th))
6240 THEN RESA_TAC
6241 THEN MP_TAC(ISPECL[`h:real`;`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`]REAL_LT_INV2)
6242 THEN RESA_TAC
6243 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)`)
6244 THEN RESA_TAC
6245 THEN MP_TAC(ISPEC`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`REAL_LE_INV)
6246 THEN RESA_TAC
6247 THEN MP_TAC(ISPEC`t-a:real`REAL_ABS_REFL)
6248 THEN RESP_TAC
6249 THEN MP_TAC(ISPECL[`inv(norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;
6250 `inv(h:real)`;`t:real-a`;`(h * d * inv (norm (u - w:real^3)))`;]REAL_LT_MUL2)
6251 THEN RESA_TAC
6252 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
6253 THEN RESA_TAC
6254 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
6255 THEN RESA_TAC
6256 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
6257 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
6258 THEN RESA_TAC
6259 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)
6260 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B*C*D)*E=(A*B)*C*(D*E)`]
6261 THEN REDUCE_ARITH_TAC
6262 THEN STRIP_TAC
6263 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;`(t:real-a)`;] REAL_LE_MUL)
6264 THEN RESA_TAC
6265 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)
6266 THEN RESA_TAC
6267 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1) \/ ~((s:real)= &1)`)
6268 THENL[
6269 POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
6270 THEN REDUCE_ARITH_TAC
6271 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`];
6272 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
6273 THEN RESA_TAC
6274 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)`;
6275 `d:real`]REAL_LT_MUL2)
6276 THEN REDUCE_ARITH_TAC
6277 THEN RESA_TAC
6278 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`]]]]);;
6279
6280
6281
6282 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.
6283 FAN(x,V,E) /\ {v,u} IN E /\ {u,w} IN E
6284 ==> ?(h:real). &0< h /\ (!(y:real^3).  y IN convex hull{v,u,w} ==> norm(y-x)<h )`,
6285 REPEAT STRIP_TAC
6286 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3),w}` ASSUME_TAC
6287 THENL(*1*)[ SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
6288                  IN_INSERT; NOT_IN_EMPTY];
6289 MP_TAC(ISPEC`{(v:real^3),(u:real^3),w}`FINITE_IMP_COMPACT_CONVEX_HULL)
6290 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;])
6291 THEN DISCH_TAC
6292 THEN ASSUME_TAC(ISPEC`x:real^3` norm_origin_fan )
6293 THEN ASSUME_TAC(SET_RULE`convex hull {(v:real^3), u,w} SUBSET (:real^3)`)
6294 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)
6295 THEN RESA_TAC
6296 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)
6297 THEN RESA_TAC
6298 THEN POP_ASSUM MP_TAC
6299 THEN REWRITE_TAC[COMPACT_EQ_BOUNDED_CLOSED;bounded;IMAGE;IN_ELIM_THM]
6300 THEN ONCE_REWRITE_TAC[TAUT`A/\B<=>B/\A`;]
6301 THEN STRIP_TAC
6302 THEN POP_ASSUM MP_TAC
6303 THEN DISCH_THEN(LABEL_TAC"A")
6304 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u,w} /\
6305         lift (norm (v - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
6306 THENL[
6307 EXISTS_TAC`v:real^3`
6308 THEN SIMP_TAC[CONVEX_HULL_3; IN_ELIM_THM;]
6309 THEN EXISTS_TAC`&1`
6310 THEN EXISTS_TAC`&0`
6311 THEN EXISTS_TAC`&0`
6312 THEN REDUCE_VECTOR_TAC
6313 THEN REAL_ARITH_TAC;
6314 SUBGOAL_THEN `&0< (a:real)` ASSUME_TAC
6315 THENL[
6316 REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`lift (norm (v - (x:real^3)))`th))
6317 THEN RESA_TAC
6318 THEN POP_ASSUM MP_TAC
6319 THEN REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
6320 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
6321 ` (v:real^3)`] remark1_fan)
6322 THEN RESA_TAC 
6323 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
6324 THEN RESA_TAC
6325 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
6326 THEN MP_TAC(REAL_ARITH`~(&0 =norm(v-x:real^3)) /\ &0 <= norm(v-x:real^3)==> &0 <norm(v-x:real^3)`)
6327 THEN RESA_TAC
6328 THEN POP_ASSUM MP_TAC
6329 THEN REAL_ARITH_TAC;
6330 EXISTS_TAC`&2 * a:real`
6331 THEN STRIP_TAC
6332 THENL[
6333 REPEAT STRIP_TAC
6334 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u,w} /\
6335         lift (norm (y - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
6336 THENL[
6337 EXISTS_TAC`y:real^3`
6338 THEN ASM_SIMP_TAC[];
6339 REMOVE_THEN "A"(fun th-> MP_TAC(ISPEC`lift (norm (y - x:real^3))`th)) 
6340 THEN ASM_REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
6341 THEN ASM_TAC
6342 THEN REAL_ARITH_TAC];
6343
6344 ASM_TAC
6345 THEN REAL_ARITH_TAC]]]]);;
6346
6347
6348 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.
6349 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
6350 /\ &0 <a /\ a< &1
6351 ==>
6352 ?(h:real). a <h /\  h<= &1
6353 /\ (!t:real. a <= t /\  t<h
6354 ==> (!(s:real). &0 <= s /\ s <= &1 
6355 ==> (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  ))`,
6356
6357 REWRITE_TAC[VECTOR_ARITH`A%B-C%B=(A-C)%B`;NORM_MUL]
6358 THEN REPEAT STRIP_TAC
6359 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
6360 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)
6361 THEN RESA_TAC
6362 THEN POP_ASSUM MP_TAC
6363 THEN DISCH_THEN(LABEL_TAC"A")
6364 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)
6365 THEN RESA_TAC
6366 THEN POP_ASSUM MP_TAC
6367 THEN DISCH_THEN(LABEL_TAC"B")
6368 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)
6369 THEN RESA_TAC
6370 THEN POP_ASSUM MP_TAC
6371 THEN DISCH_THEN(LABEL_TAC"C")
6372 THEN EXISTS_TAC`min (a+h*h*(inv (h'))* inv(norm(u-w:real^3))*d:real) (&1)`
6373 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
6374 ` (u:real^3)`] remark1_fan)
6375 THEN RESA_TAC 
6376 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
6377 THEN RESA_TAC
6378 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
6379 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
6380 THEN RESA_TAC
6381 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
6382 THEN RESA_TAC
6383 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
6384 THEN RESA_TAC
6385 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
6386 THEN RESA_TAC
6387 THEN MP_TAC(REAL_ARITH`&0 <(h':real)==> ~(h'= &0)`)
6388 THEN RESA_TAC
6389 THEN MP_TAC(ISPEC`(h':real)`REAL_MUL_LINV)
6390 THEN RESA_TAC
6391 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LE_INV)
6392 THEN RESA_TAC
6393 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LT_INV)
6394 THEN RESA_TAC
6395 THEN MP_TAC(ISPEC`(h:real)`REAL_LT_INV)
6396 THEN RESA_TAC
6397 THEN MP_TAC(REAL_ARITH`&0 <inv (h:real)==> &0 <= inv(h)`)
6398 THEN RESA_TAC
6399 THEN MP_TAC(ISPEC`(h':real)`REAL_LT_INV)
6400 THEN RESA_TAC
6401 THEN MP_TAC(REAL_ARITH`&0 <inv (h':real)==> &0 <= inv(h')`)
6402 THEN RESA_TAC
6403 THEN MP_TAC(REAL_ARITH`&0 <a /\ a< &1==> &0 <= a/\ a <= &1`)
6404 THEN RESA_TAC
6405 THEN STRIP_TAC
6406 THENL(*1*)[
6407 MP_TAC(ISPECL[`(h:real)`;`inv (h':real) `]REAL_LT_MUL)
6408 THEN RESA_TAC
6409 THEN MP_TAC(ISPECL[`(h:real)`;`(h:real)*inv (h':real) `]REAL_LT_MUL)
6410 THEN RESA_TAC
6411 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real)`;`inv(norm(u-w:real^3))`]REAL_LT_MUL)
6412 THEN RESA_TAC
6413 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real) *inv(norm(u-w:real^3))`;`d:real`]REAL_LT_MUL)
6414 THEN RESA_TAC
6415 THEN POP_ASSUM MP_TAC
6416 THEN POP_ASSUM MP_TAC
6417 THEN FIND_ASSUM MP_TAC`a:real < &1 `
6418 THEN REAL_ARITH_TAC;(*1*)
6419
6420 STRIP_TAC
6421 THENL(*2*)[
6422 REAL_ARITH_TAC;(*2*)
6423 REPEAT STRIP_TAC
6424 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3)`;`w:real^3`;`a:real`;` s:real`]expansion_convex_fan)
6425 THEN RESA_TAC
6426 THEN REMOVE_THEN "C"(fun th->MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`th))
6427 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
6428 THEN RESA_TAC
6429 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3)` ASSUME_TAC
6430 THENL(*3*)[
6431 ASM_TAC THEN SET_TAC[];(*3*)
6432 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
6433 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
6434 THEN RESA_TAC
6435 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3`NORM_POS_LE)
6436 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)`)
6437 THEN RESA_TAC
6438 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_MUL_LINV)
6439 THEN RESA_TAC
6440 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_LE_INV)
6441 THEN RESA_TAC
6442 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) `)
6443 THEN ASM_REWRITE_TAC[REAL_ARITH`min (a+h * h * inv h' * inv (norm (u - w:real^3)) * d) (&1)<= &1`]
6444 THEN STRIP_TAC
6445 THEN MP_TAC(ISPECL[`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3) `;
6446 `(h':real)`;`t-a:real`;`(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
6447 THEN RESA_TAC
6448 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0/\ &0<= &1`]
6449 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`((&1 - s) % v + s % ((&1 - a) % u + a % w):real^3)`th))
6450 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
6451 THEN ASM_REWRITE_TAC[]
6452 THEN DISCH_TAC
6453 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`]REAL_LT_INV2)
6454 THEN RESA_TAC
6455 THEN MP_TAC(ISPECL[`norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`;`t-a:real`]REAL_LE_MUL)
6456 THEN RESA_TAC
6457 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)
6458 THEN RESA_TAC
6459 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
6460 THEN ASM_REWRITE_TAC[]
6461 THEN DISCH_TAC
6462 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`th))
6463 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
6464 THEN DISCH_TAC
6465 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_LT_INV2)
6466 THEN RESA_TAC
6467 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)
6468 THEN RESA_TAC
6469 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
6470 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
6471 THEN RESA_TAC
6472 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)
6473 THEN RESA_TAC
6474 THEN MP_TAC(ISPECL[`norm (u - w:real^3)`;
6475 `inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)) *
6476       inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) *
6477       norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) *
6478       (t-a)`;`inv h * inv h * h' * h * h * inv h' * inv (norm (u - w:real^3)) * d`;]REAL_LT_LMUL)
6479 THEN RESA_TAC
6480 THEN POP_ASSUM MP_TAC
6481 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(B*C)*E*A*D`]
6482 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
6483 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
6484 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D=(A*B)*C*D`]
6485 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*(C*D)*E`]
6486 THEN ONCE_REWRITE_TAC[REAL_ARITH`(A*B*C)*D*E=A*B*(C*D)*E`]
6487 THEN ASM_REWRITE_TAC[]
6488 THEN REDUCE_ARITH_TAC
6489 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C)*D=A*B*(C*D)`]
6490 THEN REDUCE_ARITH_TAC
6491 THEN ASM_REWRITE_TAC[REAL_ARITH`((A*B)*C*D)*E=(A*C)*(B*D)*E`]
6492 THEN REDUCE_ARITH_TAC
6493 THEN REWRITE_TAC[REAL_ARITH`((A*B)*C)*D*E=(A*B)*(C*D)*E`]
6494 THEN ASSUME_TAC(ISPECL[`u:real^3`;`w:real^3`]NORM_SUB)
6495 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
6496 THEN MP_TAC(ISPECL[`t-a:real`;`w-u:real^3`]NORM_MUL)
6497 THEN MP_TAC(ISPEC`t-a:real`REAL_ABS_REFL)
6498 THEN RESP_TAC
6499 THEN DISCH_TAC
6500 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
6501 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B)*C*D=C*A*(B*D)`]
6502 THEN REDUCE_ARITH_TAC
6503 THEN DISCH_THEN(LABEL_TAC"BA")
6504 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
6505 THEN RESA_TAC
6506 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3)` ASSUME_TAC
6507 THENL(*4*)[
6508 POP_ASSUM MP_TAC
6509 THEN DISCH_THEN (LABEL_TAC"MA")
6510 THEN STRIP_TAC
6511 THEN REMOVE_THEN"MA" MP_TAC
6512 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
6513 THEN ASM_REWRITE_TAC[];(*4*)
6514 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
6515 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
6516 THEN RESA_TAC
6517 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)
6518 THEN RESP_TAC
6519 THEN ASM_REWRITE_TAC[REAL_ABS_ABS;REAL_ABS_DIV;REAL_ABS_MUL;REAL_ABS_NORM;real_div;REAL_INV_MUL;
6520 REAL_ARITH`(A*B*C)*D=A*C*(B*D)`]
6521 THEN REDUCE_ARITH_TAC
6522 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)
6523 THEN REWRITE_TAC[VECTOR_ARITH`
6524 ((&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`]
6525 THEN ONCE_REWRITE_TAC[NORM_MUL]
6526 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
6527 THEN RESP_TAC
6528 THEN DISCH_TAC
6529 THEN MP_TAC(ISPECL[`abs
6530  (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3) -
6531   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)
6532 THEN RESA_TAC
6533 THEN REMOVE_THEN "BA" MP_TAC
6534 THEN POP_ASSUM MP_TAC
6535 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1)\/ ~((s:real) = &1)`)
6536 THENL(*5*)[
6537 ASM_REWRITE_TAC[]
6538 THEN REAL_ARITH_TAC;(*5*)
6539
6540 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
6541 THEN RESA_TAC
6542 THEN ASSUME_TAC(ISPEC`((t-a) % (w - u):real^3)`NORM_POS_LE)
6543 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)
6544 THEN RESA_TAC
6545 THEN REPEAT STRIP_TAC
6546 THEN MP_TAC(ISPECL[`s:real`;`&1`;`norm ((t-a) % (w - u)) *
6547      inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`;
6548 `d:real`]REAL_LT_MUL2)
6549 THEN REDUCE_ARITH_TAC
6550 THEN ASM_REWRITE_TAC[]
6551 THEN POP_ASSUM MP_TAC
6552 THEN POP_ASSUM MP_TAC
6553 THEN POP_ASSUM MP_TAC
6554 THEN REAL_ARITH_TAC]]]]]);;
6555
6556
6557 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.
6558 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
6559 /\ &0 <a /\ a< &1
6560 ==>
6561 ?(h:real). a <h /\  h<= &1
6562 /\ (!t:real. a <= t /\  t<h
6563 ==> (!(s:real). &0 <= s /\ s <= &1 
6564 ==> 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  ))`,
6565
6566 REPEAT STRIP_TAC
6567 THEN MP_TAC(REAL_ARITH`&0< (d:real)==> &0< d/ &2`)
6568 THEN RESA_TAC
6569 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)
6570 THEN RESA_TAC
6571 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)
6572 THEN RESA_TAC
6573 THEN POP_ASSUM MP_TAC
6574 THEN DISCH_THEN (LABEL_TAC"A")
6575 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)
6576 THEN RESA_TAC
6577 THEN POP_ASSUM MP_TAC
6578 THEN DISCH_THEN (LABEL_TAC"B")
6579 THEN EXISTS_TAC`min (h:real) (h':real)`
6580 THEN STRIP_TAC
6581 THENL[ASM_TAC
6582 THEN REAL_ARITH_TAC;
6583 STRIP_TAC
6584 THENL[
6585 ASM_TAC
6586 THEN REAL_ARITH_TAC;
6587 REPEAT STRIP_TAC
6588 THEN MP_TAC(REAL_ARITH`t<  min (h:real) (h':real)==> t< (h:real) /\ t< (h':real)`)
6589 THEN RESA_TAC
6590 THEN REMOVE_THEN"B" (fun th-> MP_TAC(ISPEC`t:real`th))
6591 THEN RESA_TAC
6592 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
6593 THEN RESA_TAC
6594 THEN POP_ASSUM MP_TAC
6595 THEN DISCH_THEN (LABEL_TAC"B")
6596 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
6597 THEN RESA_TAC
6598 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
6599 THEN RESA_TAC
6600 THEN POP_ASSUM MP_TAC
6601 THEN DISCH_THEN (LABEL_TAC"A")
6602 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
6603 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
6604 THEN RESA_TAC
6605 THEN MP_TAC(ISPECL[`s *
6606       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)
6607 THEN REWRITE_TAC[REAL_ABS_MUL]
6608 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
6609 THEN RESP_TAC
6610 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`REAL_ABS_REFL)
6611 THEN RESP_TAC
6612 THEN REWRITE_TAC[REAL_ARITH`(A*B)*C=A*B*C`]
6613 THEN DISCH_TAC
6614 THEN REMOVE_THEN"B"MP_TAC
6615 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
6616 THEN REWRITE_TAC[VECTOR_ARITH`(s * inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x))) %
6617   (((&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)) %
6618       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3`]
6619
6620 THEN DISCH_TAC
6621 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)) %
6622       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;`(d:real)/ &2`;
6623 `norm
6624       (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
6625        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
6626        ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)`;`(d:real)/ &2`;
6627 ]REAL_LT_ADD2)
6628 THEN RESA_TAC
6629 THEN POP_ASSUM MP_TAC
6630 THEN REWRITE_TAC[REAL_ARITH`d / &2 + d/ &2 = d`]
6631 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)) %
6632       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;
6633 `(inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
6634        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
6635        ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)`]NORM_TRIANGLE)
6636 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)) %
6637       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)+
6638 (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
6639        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
6640        ((&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) -
6641   inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
6642   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) `]
6643 THEN REAL_ARITH_TAC]]);;
6644
6645
6646
6647 (*********************************)
6648
6649
6650 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.
6651
6652 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
6653 /\ ~(coplanar{x,v,u,w})
6654 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
6655 /\ &0 < a /\  a < &1 /\
6656          aff_gt {x} {v, (&1 - a) % u + a % w} INTER
6657          {v | ?e. e IN E /\ v IN aff_ge {x} e} =
6658          {}
6659 ==>
6660 ?h:real.
6661 (a < h) /\ (h<= &1)
6662 /\ 
6663 (!t:real. a<t /\ t<h 
6664 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge {x} {v1, u1} INTER ballnorm_fan x={})`,
6665 REPEAT STRIP_TAC 
6666 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
6667 ` (v:real^3)`] 
6668 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
6669 ` (u:real^3)`] 
6670 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`]
6671 THEN POP_ASSUM MP_TAC
6672 THEN DISCH_THEN(LABEL_TAC"THA")
6673 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)`;]
6674 THEN POP_ASSUM MP_TAC
6675 THEN DISCH_THEN(LABEL_TAC"A" )
6676 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`]
6677 THEN POP_ASSUM MP_TAC
6678 THEN DISCH_THEN(LABEL_TAC"B" )
6679 THEN EXISTS_TAC`min (a+((h'-a:real)/ &2)) (&1:real)`
6680 THEN ASM_REWRITE_TAC[]
6681 THEN STRIP_TAC
6682 THENL(*1*)[
6683 MP_TAC(REAL_ARITH`a< h':real==> &0< (h'-a)/ &2`)
6684 THEN ASM_REWRITE_TAC[]
6685 THEN FIND_ASSUM MP_TAC`a:real< &1`
6686 THEN REAL_ARITH_TAC;(*1*)
6687 STRIP_TAC
6688 THENL(*2*)[
6689 ASM_TAC
6690 THEN REAL_ARITH_TAC;(*2*)
6691 REPEAT STRIP_TAC
6692 THEN REWRITE_TAC[EXTENSION]
6693 THEN GEN_TAC
6694 THEN EQ_TAC
6695 THENL(*3*)[
6696 STRIP_TAC
6697 THEN REWRITE_TAC[EMPTY;IN_ELIM_THM]
6698 THEN SUBGOAL_THEN `!y1:real^3.
6699           y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x
6700 ==> ?y2:real^3.        y2 IN aff_ge {x:real^3} {(v:real^3), ((&1 - a) % u + a % w:real^3)} INTER ballnorm_fan x /\
6701           dist (y1,y2)<(h:real)` ASSUME_TAC
6702 THENL(*4*)[
6703 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`)
6704 THEN RESA_TAC
6705 THEN USE_THEN"A" (fun th-> MP_TAC(ISPEC`a:real`th))
6706 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
6707 THEN RESA_TAC
6708 THEN RESA_TAC
6709 THEN REPEAT STRIP_TAC
6710 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)`]
6711 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
6712 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
6713 THEN MRESA_TAC AFF_GE_1_2[`(x:real^3)` ;` (v:real^3)`;`((&1 - a) % u + a % w:real^3) `;]
6714 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist]
6715 THEN MRESA_TAC expansion_convex_fan[`(v:real^3)`;` (u:real^3)`;`w:real^3`;`a:real`;` s:real`;]
6716 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`]
6717 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%((&1 - a) % u + a % w):real^3)` ASSUME_TAC
6718 THENL(*5*)[
6719 POP_ASSUM MP_TAC
6720 THEN MATCH_MP_TAC MONO_NOT
6721 THEN RESA_TAC;(*5*)
6722 MP_TAC(ISPECL[`x:real^3`;`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`]imp_norm_not_zero_fan)
6723 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
6724 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
6725 THEN RESA_TAC
6726 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3`NORM_POS_LE)
6727 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)`)
6728 THEN RESA_TAC
6729 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_MUL_LINV)
6730 THEN RESA_TAC
6731 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_LE_INV)
6732 THEN RESA_TAC
6733 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) %
6734       ((&1 - s) % v + s %  ((&1 - a) % u + a % w) - x) +x:real^3`
6735 THEN STRIP_TAC
6736 THENL(*6*)[
6737 STRIP_TAC
6738 THENL(*7*)[
6739 EXISTS_TAC`&1 - inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) `
6740 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * (&1 - s)`
6741 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * (s)`
6742 THEN REWRITE_TAC[VECTOR_ARITH`A%(B%C + a%b-c)+c=(&1-A)%c+(A*B)%C+(A*a)%b:real^3`]
6743 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-A+A*(&1-C)+A*C= &1`]
6744 THEN STRIP_TAC
6745 THEN MATCH_MP_TAC REAL_LE_MUL
6746 THEN ASM_REWRITE_TAC[]
6747 THEN ASM_TAC
6748 THEN REAL_ARITH_TAC;(*7*)
6749 REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`A-(B+A)=(--B):real^3`;NORM_NEG;NORM_MUL]
6750 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3))`REAL_ABS_REFL)
6751 THEN RESP_TAC
6752 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
6753
6754 ASM_REWRITE_TAC[VECTOR_ARITH`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
6755   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) +
6756   x -
6757   (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) + x)=
6758 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
6759   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) -
6760   (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) ):real^3`]
6761 THEN REMOVE_THEN "B" (fun th-> MP_TAC(ISPEC`t:real`th))
6762 THEN RESA_TAC
6763 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
6764 THEN RESA_TAC
6765 THEN ASM_REWRITE_TAC[NORM_SUB]](*6*)](*5*);(*4*)
6766 POP_ASSUM (fun th->MP_TAC(ISPEC`x':real^3`th))
6767 THEN MP_TAC(SET_RULE` x' IN aff_gt {x} {v, (&1 - t) % u + t % w} INTER aff_ge {x} {v1, u1} INTER
6768       ballnorm_fan x ==>  x' IN aff_ge {x} {v1, u1:real^3} INTER ballnorm_fan x
6769 /\ x' IN aff_gt {x} {v, (&1 - t) % u + t % w:real^3} INTER ballnorm_fan x`)
6770 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
6771 THEN REPEAT STRIP_TAC
6772 THEN POP_ASSUM MP_TAC
6773 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
6774 THEN SIMP_TAC[]
6775 THEN REPEAT STRIP_TAC
6776 THEN REMOVE_THEN "THA" (fun th->  MP_TAC(ISPECL[`y2:real^3`;`x':real^3`]th))
6777 THEN POP_ASSUM MP_TAC
6778 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
6779 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
6780 THEN SIMP_TAC[dist;NORM_SUB]
6781 THEN REAL_ARITH_TAC](*4*);(*3*)
6782
6783 SET_TAC[]]]]);;
6784
6785
6786
6787 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.
6788 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
6789 /\ ~(coplanar{x,v,u,w})
6790 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
6791 /\ &0 < a /\  a < &1 /\
6792          aff_gt {x} {v, (&1 - a) % u + a % w} INTER
6793          {v | ?e. e IN E /\ v IN aff_ge {x} e} =
6794          {}
6795 ==> 
6796 ?t1:real. a < t1 /\ t1 <= &1
6797 /\ (!t:real. a< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={})`,
6798
6799 REPEAT STRIP_TAC 
6800 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
6801 ` (v:real^3)`]
6802 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
6803 ` (v1:real^3)`]  
6804 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)`;]
6805 THEN POP_ASSUM MP_TAC
6806 THEN DISCH_THEN (LABEL_TAC"BA")
6807 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`]
6808 THEN POP_ASSUM MP_TAC
6809 THEN DISCH_THEN (LABEL_TAC"A")
6810 THEN REPEAT STRIP_TAC
6811 THEN MP_TAC(REAL_ARITH` a < &1 /\ a < h ==> a < min (h:real) (&1:real)`)
6812 THEN RESA_TAC
6813 THEN MP_TAC(REAL_ARITH`  h <= &1==>  min (h:real) (&1:real)<= &1`)
6814 THEN RESA_TAC
6815 THEN EXISTS_TAC`min (h:real) (&1:real)`
6816 THEN ASM_REWRITE_TAC[]
6817 THEN REPEAT STRIP_TAC
6818 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`)
6819 THEN RESA_TAC
6820 THEN REMOVE_THEN "A"(fun th-> MRESA1_TAC th `(t:real)`)
6821 THEN POP_ASSUM MP_TAC
6822 THEN DISCH_THEN (LABEL_TAC"A")
6823 THEN REMOVE_THEN "BA"(fun th-> MRESA1_TAC th `(t:real)`)
6824 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
6825 THEN MRESA_TAC origin_is_not_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
6826 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
6827 THEN GEN_TAC
6828 THEN EQ_TAC
6829 THENL[ 
6830 REPEAT STRIP_TAC
6831 THEN SUBGOAL_THEN`~(x=x':real^3)`ASSUME_TAC
6832 THENL[
6833 POP_ASSUM MP_TAC
6834 THEN POP_ASSUM MP_TAC
6835 THEN POP_ASSUM MP_TAC
6836 THEN SET_TAC[];
6837 MRESA_TAC imp_norm_not_zero_fan[`x':real^3`;`x:real^3`]
6838 THEN ASSUME_TAC(ISPEC`x'-x:real^3`NORM_POS_LE)
6839 THEN MP_TAC(REAL_ARITH`~(norm(x'-x:real^3)= &0) /\ &0 <= norm(x'-x:real^3)==> &0 <norm(x'-x:real^3)`)
6840 THEN RESA_TAC
6841 THEN MRESA1_TAC REAL_LE_INV `norm(x'-x:real^3)`
6842 THEN MRESA1_TAC REAL_LT_INV `norm(x'-x:real^3)`
6843 THEN MRESA1_TAC REAL_MUL_LINV `norm(x'-x:real^3)`
6844 THEN MRESA_TAC scale_aff_ge_fan[`x:real^3`;`v1:real^3`;`u1:real^3`]
6845 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
6846 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
6847 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
6848 THEN SUBGOAL_THEN`inv (norm (x' - x)) % (x' - x) + x IN ballnorm_fan x:real^3->bool` ASSUME_TAC
6849 THENL[
6850 MRESA1_TAC REAL_ABS_REFL `inv(norm(x'-x:real^3))`
6851 THEN ASM_REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`B-(A+B)= --A:real^3`;NORM_NEG;NORM_MUL];
6852 ASM_TAC
6853 THEN SET_TAC[]]];
6854
6855 SET_TAC[]]);;
6856
6857
6858 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.
6859 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
6860 /\ ~(coplanar{x,v,u,w})
6861 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
6862 /\ &0 < a /\  a < &1 /\
6863          aff_gt {x} {v, (&1 - a) % u + a % w} INTER
6864          {v | ?e. e IN E /\ v IN aff_ge {x} e} =
6865          {}
6866 /\ (!s. &0 < s /\ s < a
6867           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
6868               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
6869               {})
6870 ==> 
6871 (?t1:real. a < t1 /\ t1 <= &1
6872 /\ (!t:real. &0< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={}))`,
6873 REPEAT STRIP_TAC
6874 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`]
6875 THEN EXISTS_TAC`t1:real`
6876 THEN ASM_REWRITE_TAC[]
6877 THEN GEN_TAC
6878 THEN MP_TAC(REAL_ARITH`&0<a /\ a< t1==>((&0<t /\ t<t1) <=> (&0<t /\ t<a)\/ t=a \/ (a<t/\ t<t1:real))`)
6879 THEN RESA_TAC
6880 THEN STRIP_TAC
6881 THEN ASM_TAC THEN SET_TAC[]);;
6882
6883 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.
6884 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
6885 /\ ~coplanar {x,v,u,w}
6886 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
6887 /\ &0 <a /\ a< &1 
6888 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
6889       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
6890 /\ (!s. &0 < s /\ s < a
6891           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
6892               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
6893               {})
6894 ==> ?t1. a < t1 /\ t1<= &1
6895 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
6896
6897
6898 REPEAT STRIP_TAC
6899 THEN POP_ASSUM MP_TAC
6900 THEN POP_ASSUM MP_TAC
6901 THEN DISCH_THEN(LABEL_TAC"MAI MAI")
6902 THEN DISCH_THEN(LABEL_TAC"YEU EM")
6903 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)`;]
6904 THEN POP_ASSUM MP_TAC
6905 THEN DISCH_THEN (LABEL_TAC"A")
6906 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)`)
6907 THENL(*1*)[
6908 POP_ASSUM MP_TAC
6909 THEN STRIP_TAC
6910 THEN EXISTS_TAC`(h:real)`
6911 THEN STRIP_TAC
6912 THENL(*2*)[
6913 ASM_TAC
6914 THEN REAL_ARITH_TAC;(*2*)
6915 STRIP_TAC
6916 THENL(*3*)[
6917 ASM_TAC
6918 THEN REAL_ARITH_TAC;(*3*)
6919 REPEAT STRIP_TAC
6920 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
6921 THEN RESA_TAC
6922 THEN MP_TAC(REAL_ARITH`(t:real)< (h:real) /\ h <= &1 ==> t < &1`)
6923 THEN RESA_TAC
6924 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
6925 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
6926 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
6927 ` (v:real^3)`]
6928 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
6929 ` (v:real^3)`]  
6930 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
6931 THEN GEN_TAC
6932 THEN EQ_TAC
6933 THENL(*4*)[
6934
6935 DISCH_TAC
6936 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
6937 THENL(*5*)[
6938 POP_ASSUM MP_TAC
6939 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
6940 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
6941 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
6942 THEN STRIP_TAC
6943 THEN POP_ASSUM MP_TAC
6944 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
6945  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
6946  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
6947 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
6948 THEN RESA_TAC
6949 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
6950 THEN STRIP_TAC
6951 THEN MP_TAC(SET_RULE`
6952 t3 % ((&1 - t) % u + t % w) = (t1'-t1) % x + (t2'-t2) % v + t3' % w1:real^3 
6953 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1'-t1) % x + (t2'-t2) % v + t3' % w1)`)
6954 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
6955 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`]
6956 THEN REDUCE_VECTOR_TAC
6957 THEN STRIP_TAC
6958 THEN FIND_ASSUM MP_TAC`t1' + t2' + t3' = &1:real`
6959 THEN FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
6960 THEN DISCH_TAC 
6961 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
6962 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
6963 THEN STRIP_TAC
6964 THEN MP_TAC(SET_RULE`
6965 (t1'-t1) + (t2'-t2) + t3' = t3
6966 ==> (inv (t3))*((t1'-t1) + (t2'-t2) + t3') = (inv (t3))*t3`)
6967 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
6968 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
6969 THEN STRIP_TAC
6970 THEN EXISTS_TAC`inv t3 * (t1' - t1):real`
6971 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
6972 THEN EXISTS_TAC`inv t3 * t3':real`
6973 THEN ASM_REWRITE_TAC[]
6974 THEN MATCH_MP_TAC REAL_LE_MUL
6975 THEN ASM_REWRITE_TAC[]
6976 THEN MATCH_MP_TAC REAL_LE_INV
6977 THEN ASM_TAC
6978 THEN REAL_ARITH_TAC;(*5*)
6979
6980 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
6981 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
6982 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`;]
6983 THEN MRESA_TAC injective_azim_coplanar[`x:real^3`;` v:real^3`;` u:real^3`;` w:real^3`]
6984 THEN POP_ASSUM (fun th->MRESA_TAC th [`h:real`;`t:real`])
6985 THEN ASM_TAC
6986 THEN REAL_ARITH_TAC](*5*)(*4*);
6987 SET_TAC[]]]];(*1*)
6988 POP_ASSUM MP_TAC
6989 THEN ONCE_REWRITE_TAC[NOT_EXISTS_THM]
6990 THEN DISCH_THEN(LABEL_TAC"B")
6991 THEN EXISTS_TAC`&1:real`
6992 THEN ASM_REWRITE_TAC[REAL_ARITH `&1<= &1`]
6993 THEN REPEAT STRIP_TAC
6994 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
6995 THEN RESA_TAC
6996 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
6997 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
6998 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
6999 ` (v:real^3)`]
7000 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
7001 ` (v:real^3)`]  
7002 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
7003 THEN GEN_TAC
7004 THEN EQ_TAC
7005 THENL(*2*)[
7006 DISCH_TAC
7007 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
7008 THENL(*3*)[
7009 POP_ASSUM MP_TAC
7010 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
7011 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
7012 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
7013 THEN STRIP_TAC
7014 THEN POP_ASSUM MP_TAC
7015 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
7016  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
7017  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
7018 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
7019 THEN RESA_TAC
7020 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
7021 THEN STRIP_TAC
7022 THEN MP_TAC(SET_RULE`
7023 t3 % ((&1 - t) % u + t % w) = (t1'-t1) % x + (t2'-t2) % v + t3' % w1:real^3 
7024 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1'-t1) % x + (t2'-t2) % v + t3' % w1)`)
7025 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
7026 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`]
7027 THEN REDUCE_VECTOR_TAC
7028 THEN STRIP_TAC
7029 THEN FIND_ASSUM MP_TAC`t1' + t2' + t3' = &1:real`
7030 THEN FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
7031 THEN DISCH_TAC 
7032 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
7033 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
7034 THEN STRIP_TAC
7035 THEN MP_TAC(SET_RULE`
7036 (t1'-t1) + (t2'-t2) + t3' = t3
7037 ==> (inv (t3))*((t1'-t1) + (t2'-t2) + t3') = (inv (t3))*t3`)
7038 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
7039 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
7040 THEN STRIP_TAC
7041 THEN EXISTS_TAC`inv t3 * (t1' - t1):real`
7042 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
7043 THEN EXISTS_TAC`inv t3 * t3':real`
7044 THEN ASM_REWRITE_TAC[]
7045 THEN MATCH_MP_TAC REAL_LE_MUL
7046 THEN ASM_REWRITE_TAC[]
7047 THEN MATCH_MP_TAC REAL_LE_INV
7048 THEN ASM_TAC
7049 THEN REAL_ARITH_TAC;(*3*)
7050 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
7051 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
7052 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`;]
7053 THEN REMOVE_THEN "B"(fun th -> MRESAL1_TAC th `t:real`[DE_MORGAN_THM; REAL_ARITH`~(A<B)<=> B<A\/ B=A`])
7054 THENL(*4*)[REMOVE_THEN"YEU EM"(fun th-> MRESA1_TAC th `t:real`)
7055 THEN POP_ASSUM MP_TAC
7056 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7057 THEN POP_ASSUM MP_TAC
7058 THEN FIND_ASSUM MP_TAC `{v,w1:real^3} IN E`
7059 THEN SET_TAC[];
7060 REMOVE_THEN"MAI MAI" MP_TAC
7061 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
7062 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7063 THEN POP_ASSUM MP_TAC
7064 THEN FIND_ASSUM MP_TAC `{v,w1:real^3} IN E`
7065 THEN SET_TAC[];
7066 ASM_TAC
7067 THEN REAL_ARITH_TAC](*4*)];
7068 SET_TAC[]]]);;
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078 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.
7079 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {u,w1} IN E 
7080 /\ ~coplanar {x,v,u,w} /\ sigma_fan x V E u w=v
7081 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
7082 /\ &0 <a /\ a< &1 
7083 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
7084       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
7085 /\ (!s. &0 < s /\ s < a
7086           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
7087               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
7088               {})
7089 ==> ?t1. a < t1 /\ t1 <= &1
7090 /\  (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {u,w1}={})`,
7091 REPEAT STRIP_TAC
7092 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)`;]
7093 THEN POP_ASSUM MP_TAC
7094 THEN DISCH_THEN (LABEL_TAC"A")
7095 THEN EXISTS_TAC`&1:real`
7096 THEN ASM_REWRITE_TAC[REAL_ARITH`&1<= &1`]
7097 THEN REPEAT STRIP_TAC
7098 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t /\ ~(t= &0)`)
7099 THEN RESA_TAC
7100 THEN MP_TAC(REAL_ARITH`t< &1 ==>t<= &1`)
7101 THEN RESA_TAC
7102 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
7103 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
7104 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7105 ` (v:real^3)`]
7106 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
7107 ` (u:real^3)`]  
7108 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
7109 THEN GEN_TAC
7110 THEN EQ_TAC
7111 THENL(*1*)[
7112 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
7113 THEN STRIP_TAC
7114 THEN SUBGOAL_THEN `x' IN (aff_ge {x,u} {w1}:real^3->bool)`ASSUME_TAC
7115 THENL(*2*)[
7116 POP_ASSUM MP_TAC
7117 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
7118 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
7119 THEN STRIP_TAC
7120 THEN EXISTS_TAC`t1':real`
7121 THEN EXISTS_TAC`t2':real`
7122 THEN EXISTS_TAC`t3':real`
7123 THEN ASM_REWRITE_TAC[];
7124 POP_ASSUM MP_TAC
7125 THEN ASM_REWRITE_TAC[]
7126 THEN STRIP_TAC
7127 THEN MRESA_TAC inequality3_aim_in_convex_fan
7128 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
7129 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
7130 THEN POP_ASSUM(fun th-> MRESA_TAC th [`t1:real`;`t2:real`;`t3:real`])
7131 THEN POP_ASSUM MP_TAC
7132 THEN POP_ASSUM MP_TAC
7133 THEN DISCH_THEN(LABEL_TAC"BE")
7134 THEN DISCH_THEN(LABEL_TAC"YEU")
7135 THEN SUBGOAL_THEN`~collinear {x, u, x':real^3}`ASSUME_TAC
7136 THENL(*3*)[
7137 MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
7138 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
7139 THEN ASM_REWRITE_TAC[collinear_fan;]
7140 THEN POP_ASSUM MP_TAC
7141 THEN MATCH_MP_TAC MONO_NOT
7142 THEN REWRITE_TAC[coplanar;aff; AFFINE_HULL_2;IN_ELIM_THM]
7143 THEN STRIP_TAC
7144 THEN EXISTS_TAC`x:real^3`
7145 THEN EXISTS_TAC`v:real^3`
7146 THEN EXISTS_TAC`u:real^3`
7147 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
7148 THENL(*4*)[
7149 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
7150 THEN EXISTS_TAC`&1`
7151 THEN EXISTS_TAC`&0`
7152 THEN EXISTS_TAC`&0`
7153 THEN REDUCE_ARITH_TAC
7154 THEN VECTOR_ARITH_TAC;
7155
7156 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
7157 THENL(*5*)[
7158 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
7159 THEN EXISTS_TAC`&0`
7160 THEN EXISTS_TAC`&1`
7161 THEN EXISTS_TAC`&0`
7162 THEN REDUCE_ARITH_TAC
7163 THEN VECTOR_ARITH_TAC;
7164 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
7165 THENL(*6*)[
7166 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
7167 THEN EXISTS_TAC`&0`
7168 THEN EXISTS_TAC`&0`
7169 THEN EXISTS_TAC`&1`
7170 THEN REDUCE_ARITH_TAC
7171 THEN VECTOR_ARITH_TAC;
7172 SUBGOAL_THEN`((&1 - t) % u + t % w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
7173 THENL(*7*)[
7174 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
7175 THEN REMOVE_ASSUM_TAC
7176 THEN REMOVE_ASSUM_TAC
7177 THEN REMOVE_ASSUM_TAC
7178 THEN POP_ASSUM MP_TAC
7179 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
7180 THEN RESA_TAC
7181 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
7182 THEN RESA_TAC
7183 THEN ASM_REWRITE_TAC[]
7184 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) = u' % x + v' % u
7185 <=>t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u:real^3`]
7186 THEN STRIP_TAC
7187 THEN MP_TAC(SET_RULE`
7188 t3 % ((&1 - t) % u + t % w) = (u'-t1) % x -t2 % v+v' % u
7189 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w) ) = (inv (t3))%((u'-t1) % x -t2 % v+v' % u):real^3`)
7190 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
7191 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B-C+D)=A%B-A%C+A%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
7192 THEN REDUCE_VECTOR_TAC
7193 THEN STRIP_TAC
7194 THEN EXISTS_TAC`(inv t3 * (u' - t1)):real`
7195 THEN EXISTS_TAC`-- (inv t3 * t2):real`
7196 THEN EXISTS_TAC`(inv t3 * v'):real`
7197 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*)
7198
7199 ASM_TAC
7200 THEN SET_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
7201  
7202 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7203 ` (u:real^3)`]
7204 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
7205 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
7206 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`;`x':real^3`;]
7207 THEN REMOVE_THEN"BE" MP_TAC
7208 THEN REMOVE_THEN"YEU" MP_TAC
7209 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
7210 THEN FIND_ASSUM MP_TAC`(sigma_fan x V E u w = (v:real^3))`
7211 THEN DISCH_TAC
7212 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
7213 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge u V E = {w:real^3}) \/ ~(set_of_edge u V E = {w})`)
7214 THENL(*4*)[
7215 FIND_ASSUM MP_TAC`w1 IN set_of_edge (u:real^3) V E`
7216 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th);IN_SING])
7217 THEN DISCH_TAC
7218 THEN ASM_REWRITE_TAC[]
7219 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
7220 THEN REAL_ARITH_TAC;(*4*)
7221
7222 DISJ_CASES_TAC(SET_RULE`(w1:real^3)=w \/ ~((w1:real^3)=w)`)
7223 THENL(*5*)[
7224 ASM_REWRITE_TAC[]
7225 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
7226 THEN REAL_ARITH_TAC;
7227 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`]
7228 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
7229 THEN POP_ASSUM MP_TAC
7230 THEN REAL_ARITH_TAC]]]];
7231
7232 SET_TAC[]]);;
7233
7234
7235
7236
7237
7238 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.
7239 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v1,w1} IN E 
7240 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
7241 /\ sigma_fan x V E u w = v
7242 /\ &0 <a /\ a< &1 
7243 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
7244       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
7245 /\ (!s. &0 < s /\ s < a
7246           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
7247               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
7248               {})
7249
7250 ==> 
7251 ?t1:real. a<t1 /\ t1<= &1
7252 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,w1}={})`,
7253
7254
7255 (let lem=prove(`!x v v1. aff_ge {x} {v1, v}=aff_ge {x} {v, v1}`,
7256 REPEAT STRIP_TAC
7257 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
7258 THEN SIMP_TAC[]) in
7259
7260 REPEAT STRIP_TAC
7261 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`]
7262 THEN DISJ_CASES_TAC(SET_RULE`(v1=v)\/ ~(v1=v:real^3)`)
7263 THENL[
7264 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`];
7265
7266 DISJ_CASES_TAC(SET_RULE`(v1=u)\/ ~(v1=u:real^3)`)
7267 THENL[
7268 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`];
7269  DISJ_CASES_TAC(SET_RULE`(w1=v)\/ ~(w1=v:real^3)`)
7270 THENL[
7271 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
7272 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
7273 THEN STRIP_TAC
7274 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`]
7275 THEN EXISTS_TAC`t1:real`
7276 THEN ASM_REWRITE_TAC[lem];
7277 DISJ_CASES_TAC(SET_RULE`(w1=u)\/ ~(w1=u:real^3)`)
7278 THENL[
7279 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
7280 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
7281 THEN STRIP_TAC
7282 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`]
7283 THEN EXISTS_TAC`t1:real`
7284 THEN ASM_REWRITE_TAC[lem];
7285 SUBGOAL_THEN`{v,u} INTER {v1,w1:real^3}={}` ASSUME_TAC
7286 THENL[
7287 ASM_TAC
7288 THEN SET_TAC[];
7289 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`]]]]]]));;
7290
7291
7292 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.
7293 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ E' SUBSET E
7294 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
7295 /\ sigma_fan x V E u w = v
7296 /\ &0 <a /\ a< &1 
7297 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
7298       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
7299 /\ (!s. &0 < s /\ s < a
7300           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
7301               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
7302               {})
7303 ==>
7304 ?h:real. a<h /\ h<= &1
7305 /\ (!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}={})`,
7306
7307 REPEAT STRIP_TAC 
7308 THEN MRESA_TAC set_edges_is_finite_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
7309 THEN MRESA_TAC  FINITE_SUBSET [`(E':(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`]
7310 THEN ABBREV_TAC`n=CARD (E':(real^3->bool)->bool)`
7311 THEN REPEAT(POP_ASSUM MP_TAC)
7312 THEN SPEC_TAC (`(E':(real^3->bool)->bool)`,`(E':(real^3->bool)->bool)`)
7313 THEN SPEC_TAC (`n:num`,`n:num`)
7314 THEN INDUCT_TAC
7315 THENL(*1*)[
7316 REPEAT STRIP_TAC 
7317 THEN MP_TAC(ISPECL[`E':(real^3->bool)->bool`]CARD_EQ_0)
7318 THEN RESA_TAC
7319 THEN EXISTS_TAC`a+ (&1-a:real) / &2`
7320 THEN MP_TAC(REAL_ARITH`&0<a /\ a < &1 ==> a< a+ (&1-a:real) / &2/\ a+ (&1-a:real) / &2 <= &1`)
7321 THEN RESA_TAC
7322 THEN ASM_SET_TAC[];(*1*)
7323
7324 REPEAT GEN_TAC
7325 THEN POP_ASSUM MP_TAC
7326 THEN DISCH_THEN (LABEL_TAC "A")
7327 THEN REPEAT STRIP_TAC
7328 THEN MP_TAC(ISPEC`(E':(real^3->bool)->bool)` CHOOSE_SUBSET)
7329 THEN RESA_TAC
7330 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`n:num `th))
7331 THEN REWRITE_TAC[ARITH_RULE `n:num <= SUC n`; HAS_SIZE]
7332 THEN STRIP_TAC
7333 THEN MP_TAC(SET_RULE` t SUBSET E' /\ E' SUBSET E ==> (t:(real^3->bool)->bool) SUBSET E`)
7334 THEN RESA_TAC
7335 THEN REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`(t:(real^3->bool)->bool)`th))
7336 THEN RESA_TAC
7337 THEN POP_ASSUM MP_TAC
7338 THEN DISCH_THEN(LABEL_TAC"YEU")
7339 THEN SUBGOAL_THEN `~((E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)= {})` ASSUME_TAC
7340 THENL(*2*)[
7341 STRIP_TAC
7342 THEN MP_TAC(SET_RULE`(E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)={} /\ t SUBSET E' ==>  t= E'`)
7343 THEN RESA_TAC
7344 THEN FIND_ASSUM MP_TAC`CARD (t:(real^3->bool)->bool)=n`
7345 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
7346 THEN ASM_REWRITE_TAC[]
7347 THEN ARITH_TAC;(*2*)
7348 SUBGOAL_THEN`?e. e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)` ASSUME_TAC
7349 THENL(*3*)[
7350 ASM_SET_TAC[];(*3*)
7351
7352 POP_ASSUM MP_TAC
7353 THEN STRIP_TAC
7354 THEN MP_TAC(SET_RULE`e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)/\
7355 (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'`)
7356 THEN RESA_TAC
7357 THEN MP_TAC(ISPECL [`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`(E':(real^3->bool)->bool)`] FINITE_SUBSET)
7358 THEN RESA_TAC
7359 THEN ASSUME_TAC(SET_RULE`e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
7360 THEN MP_TAC(ISPECL[`e:real^3->bool`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;]CARD_DELETE)
7361 THEN RESA_TAC
7362 THEN MP_TAC(SET_RULE `e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool) 
7363 ==> ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e PSUBSET {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
7364 THEN RESA_TAC
7365 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)
7366 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7367 THEN FIND_ASSUM MP_TAC`FINITE ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`
7368 THEN DISCH_TAC
7369 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7370 THEN DISCH_TAC
7371 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))
7372 /\ 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
7373 <=>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))`)
7374 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7375 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
7376 THEN REWRITE_TAC[ARITH_RULE`A=A`; ]
7377 THEN MP_TAC(SET_RULE`~(e IN t)==>({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e=t`)
7378 THEN RESA_TAC
7379 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7380 THEN FIND_ASSUM MP_TAC`(CARD (E':(real^3->bool)->bool)=SUC n)`
7381 THEN REWRITE_TAC[ARITH_RULE`SUC n=(n:num) +1`]
7382 THEN DISCH_TAC
7383 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
7384 THEN DISCH_TAC
7385 THEN MP_TAC(ISPECL[`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`E':(real^3->bool)->bool`]CARD_SUBSET_EQ)
7386 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
7387 THEN RESA_TAC
7388 THEN POP_ASSUM MP_TAC
7389 THEN DISCH_THEN(LABEL_TAC"MA")
7390 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
7391 THEN RESA_TAC
7392 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`]
7393 THEN POP_ASSUM MP_TAC
7394 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
7395 THEN POP_ASSUM MP_TAC
7396 THEN RESA_TAC
7397 THEN STRIP_TAC
7398 THEN POP_ASSUM MP_TAC
7399 THEN DISCH_THEN(LABEL_TAC"BE")
7400 THEN EXISTS_TAC` min (h:real) (t1:real)`
7401 THEN STRIP_TAC
7402 THENL(*4*)[
7403 ASM_TAC
7404 THEN REAL_ARITH_TAC;(*4*)
7405
7406 STRIP_TAC
7407 THENL(*5*)[
7408 ASM_TAC
7409 THEN REAL_ARITH_TAC;(*5*)
7410 REPEAT STRIP_TAC
7411 THEN REMOVE_THEN "MA" MP_TAC
7412 THEN DISCH_TAC
7413 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
7414 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION; INTER;]
7415 THEN GEN_TAC
7416 THEN EQ_TAC
7417 THENL(*6*)[
7418 ASM_REWRITE_TAC[IN_SING]
7419 THEN MP_TAC(REAL_ARITH`s< min h t1==> s<h /\ s<t1`)
7420 THEN RESA_TAC
7421 THEN STRIP_TAC
7422 THENL(*7*)[
7423
7424
7425 POP_ASSUM MP_TAC
7426 THEN ASM_REWRITE_TAC[]
7427 THEN REMOVE_THEN "BE"(fun th-> MRESA1_TAC th `s:real`)
7428 THEN ASM_SET_TAC[];
7429
7430 POP_ASSUM MP_TAC
7431 THEN ASM_REWRITE_TAC[]
7432 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th `s:real`)
7433 THEN ASM_SET_TAC[]];
7434 SET_TAC[]]]]]]]);;
7435
7436
7437
7438
7439
7440
7441
7442 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.
7443 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
7444 /\ sigma_fan x V E u w = v
7445 /\ &0<a /\ a<= &1
7446 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
7447 /\ fan80(x,V,E)
7448 /\  ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
7449 ==> a= &1 `,
7450 REPEAT STRIP_TAC
7451 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
7452 THEN REWRITE_TAC[fan80]
7453 THEN DISCH_TAC
7454 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"))
7455 THEN ABBREV_TAC`s1={h:real| &0< h/\ h<= &1 /\
7456 ~(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}={})}`
7457 THEN SUBGOAL_THEN`(a:real) IN (s1:real->bool)` ASSUME_TAC
7458 THENL(*1*)[
7459 POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM]);
7460
7461 MP_TAC(SET_RULE`(a:real) IN (s1:real->bool)==> ~(s1={})`)
7462 THEN RESA_TAC
7463 THEN SUBGOAL_THEN`(?b. !x:real. x IN s1 ==> b <= x)`ASSUME_TAC
7464 THENL(*2*)[
7465 EXISTS_TAC`&0`
7466 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7467 THEN POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM])
7468 THEN REAL_ARITH_TAC;
7469 MRESA1_TAC INF`s1:real->bool`
7470 THEN ABBREV_TAC`b= inf (s1:real->bool)`
7471 THEN SUBGOAL_THEN`b<= &1` ASSUME_TAC
7472 THENL(*3*)[POP_ASSUM MP_TAC
7473 THEN POP_ASSUM MP_TAC
7474 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
7475 THEN ASM_TAC
7476 THEN REAL_ARITH_TAC;(*3*)
7477  
7478 SUBGOAL_THEN`~(?s. &0 < s /\ s < b
7479           /\ ~( aff_gt {x} {v, (&1 - s) % u + s % w} INTER
7480               {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e} =
7481               {}))` ASSUME_TAC
7482 THENL(*4*)[STRIP_TAC
7483 THEN SUBGOAL_THEN`s IN (s1:real->bool)` ASSUME_TAC
7484 THENL(*5*)[ EXPAND_TAC"s1"
7485 THEN REWRITE_TAC[IN_ELIM_THM]
7486 THEN ASM_REWRITE_TAC[]
7487 THEN ASM_TAC THEN REAL_ARITH_TAC;(*5*)
7488 POP_ASSUM MP_TAC
7489 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
7490 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7491 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`s:real` th))
7492 THEN DISCH_THEN (LABEL_TAC"DICH")
7493 THEN REPEAT STRIP_TAC
7494 THEN REMOVE_THEN"DICH" MP_TAC
7495 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7496 THEN POP_ASSUM MP_TAC
7497 THEN REAL_ARITH_TAC];(*4*)
7498 POP_ASSUM MP_TAC
7499 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM;IMP_IMP]
7500 THEN STRIP_TAC
7501 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`] 
7502 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h <= x))`ASSUME_TAC
7503 THENL(*5*)[
7504 POP_ASSUM MP_TAC
7505 THEN DISCH_THEN(LABEL_TAC"A")
7506 THEN EXPAND_TAC"s1"
7507 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
7508 THEN STRIP_TAC
7509 THEN ASM_REWRITE_TAC[]
7510 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*5*)
7511
7512 POP_ASSUM MP_TAC
7513 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
7514 THEN STRIP_TAC
7515 THEN SUBGOAL_THEN`&0<b:real`ASSUME_TAC
7516 THENL(*6*)[
7517
7518
7519 POP_ASSUM MP_TAC
7520 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
7521 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7522 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h:real` th))
7523 THEN DISCH_THEN (LABEL_TAC"DICH")
7524 THEN REPEAT STRIP_TAC
7525 THEN REMOVE_THEN"DICH" MP_TAC
7526 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7527 THEN POP_ASSUM MP_TAC
7528 THEN REAL_ARITH_TAC;(*6*)
7529 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`]
7530 THEN POP_ASSUM MP_TAC
7531 THEN DISJ_CASES_TAC(REAL_ARITH`(b:real)< &1\/ &1 <= b`)
7532 THENL(*7*)[
7533 ASM_REWRITE_TAC[]
7534 THEN STRIP_TAC
7535 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`]
7536 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h' <= x))`ASSUME_TAC
7537 THENL(*8*)[
7538 POP_ASSUM MP_TAC
7539 THEN DISCH_THEN(LABEL_TAC"A")
7540 THEN EXPAND_TAC"s1"
7541 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
7542 THEN STRIP_TAC
7543 THEN ASM_REWRITE_TAC[]
7544 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*8*)
7545 POP_ASSUM MP_TAC
7546 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
7547 THEN STRIP_TAC
7548 THEN SUBGOAL_THEN `h':real <= b`ASSUME_TAC
7549 THENL(*9*)[POP_ASSUM MP_TAC
7550 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7551 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7552 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7553 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7554 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7555 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h':real` th))
7556 THEN REWRITE_TAC[];(*9*)
7557 POP_ASSUM MP_TAC
7558 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7559 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC](*9*)](*8*);(*7*)
7560
7561 STRIP_TAC
7562 THEN MP_TAC(REAL_ARITH`&1<=b /\ b<= &1==> b= &1`) THEN RESA_TAC
7563 THEN POP_ASSUM MP_TAC
7564 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7565 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7566 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7567 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7568 THEN REMOVE_ASSUM_TAC   
7569 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`a:real` th))
7570 THEN RESA_TAC
7571 THEN POP_ASSUM MP_TAC
7572 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7573 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7574 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7575 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7576 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC]]]]]]]);;
7577
7578
7579
7580
7581
7582
7583 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.
7584 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
7585 /\ sigma_fan x V E u w = v
7586 /\ &0<a /\ a< &1
7587 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
7588 /\ fan80(x,V,E)
7589 ==>  (aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})`,
7590
7591 REPEAT STRIP_TAC
7592 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}={})) `)
7593 THENL[
7594 POP_ASSUM MP_TAC
7595 THEN STRIP_TAC
7596 THEN POP_ASSUM MP_TAC
7597 THEN DISCH_THEN(LABEL_TAC"EM BE")
7598 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
7599 THEN REWRITE_TAC[fan80]
7600 THEN DISCH_TAC
7601 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"))
7602 THEN ABBREV_TAC`s1={h:real| &0< h/\ h< &1 /\
7603 ~(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}={})}`
7604 THEN SUBGOAL_THEN`(a':real) IN (s1:real->bool)` ASSUME_TAC
7605 THENL(*1*)[
7606 POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM]);
7607 MP_TAC(SET_RULE`(a':real) IN (s1:real->bool)==> ~(s1={})`)
7608 THEN RESA_TAC
7609 THEN SUBGOAL_THEN`(?b. !x:real. x IN s1 ==> b <= x)`ASSUME_TAC
7610 THENL(*2*)[EXISTS_TAC`&0`
7611 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7612 THEN POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM])
7613 THEN REAL_ARITH_TAC;(*2*)
7614 MRESA1_TAC INF`s1:real->bool`
7615 THEN ABBREV_TAC`b= inf (s1:real->bool)`
7616 THEN SUBGOAL_THEN`b< &1` ASSUME_TAC
7617 THENL(*3*)[
7618 POP_ASSUM MP_TAC
7619 THEN POP_ASSUM MP_TAC
7620 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a':real`)
7621 THEN ASM_TAC
7622 THEN REAL_ARITH_TAC;(*3*)
7623  SUBGOAL_THEN`~(?s. &0 < s /\ s < b
7624           /\ ~( aff_gt {x} {v, (&1 - s) % u + s % w} INTER
7625               {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e} =
7626               {}))` ASSUME_TAC
7627 THENL(*4*)[
7628 STRIP_TAC
7629 THEN SUBGOAL_THEN`s IN (s1:real->bool)` ASSUME_TAC
7630 THENL(*5*)[EXPAND_TAC"s1"
7631 THEN REWRITE_TAC[IN_ELIM_THM]
7632 THEN ASM_REWRITE_TAC[]
7633 THEN ASM_TAC THEN REAL_ARITH_TAC;(*5*)
7634 POP_ASSUM MP_TAC
7635 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
7636 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7637 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`s:real` th))
7638 THEN DISCH_THEN (LABEL_TAC"DICH")
7639 THEN REPEAT STRIP_TAC
7640 THEN REMOVE_THEN"DICH" MP_TAC
7641 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7642 THEN POP_ASSUM MP_TAC
7643 THEN REAL_ARITH_TAC];(*4*)
7644
7645 POP_ASSUM MP_TAC
7646 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM;IMP_IMP]
7647 THEN STRIP_TAC
7648 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`] 
7649 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h <= x))`ASSUME_TAC
7650 THENL(*5*)[POP_ASSUM MP_TAC
7651 THEN DISCH_THEN(LABEL_TAC"A")
7652 THEN EXPAND_TAC"s1"
7653 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
7654 THEN STRIP_TAC
7655 THEN ASM_REWRITE_TAC[]
7656 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*5*)
7657
7658 POP_ASSUM MP_TAC
7659 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
7660 THEN STRIP_TAC
7661 THEN SUBGOAL_THEN`&0<b:real`ASSUME_TAC
7662 THENL(*6*)[
7663 POP_ASSUM MP_TAC
7664 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
7665 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7666 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h:real` th))
7667 THEN DISCH_THEN (LABEL_TAC"DICH")
7668 THEN REPEAT STRIP_TAC
7669 THEN REMOVE_THEN"DICH" MP_TAC
7670 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
7671 THEN POP_ASSUM MP_TAC
7672 THEN REAL_ARITH_TAC;(*6*)
7673 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`]
7674 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`]
7675 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h' <= x))`ASSUME_TAC
7676 THENL(*7*)[
7677 POP_ASSUM MP_TAC
7678 THEN DISCH_THEN(LABEL_TAC"A")
7679 THEN EXPAND_TAC"s1"
7680 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
7681 THEN STRIP_TAC
7682 THEN ASM_REWRITE_TAC[]
7683 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*7*)
7684 POP_ASSUM MP_TAC
7685 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
7686 THEN STRIP_TAC
7687 THEN SUBGOAL_THEN `h':real <= b`ASSUME_TAC
7688 THENL(*8*)[POP_ASSUM MP_TAC
7689 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7690 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7691 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7692 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7693 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  
7694 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h':real` th))
7695 THEN REWRITE_TAC[];
7696
7697 POP_ASSUM MP_TAC
7698 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
7699 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC]]]]]]]];
7700
7701 POP_ASSUM (fun th-> MRESA1_TAC th`a:real`)]);;
7702
7703
7704
7705
7706
7707 let lie_in_half_space_and_azim_le=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.
7708 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
7709 /\ sigma_fan x V E u w = v
7710 /\ &0<a /\ a<= &1
7711 /\ fan80(x,V,E)
7712 /\ ~collinear{x,v1,u1}
7713 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
7714 /\ &0< azim x v1 v u1
7715 /\  azim x v1 v u1 < pi
7716 ==> &0 < ((v-x) cross (u - x)) dot (v1-x)`,
7717
7718
7719 REPEAT STRIP_TAC
7720 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
7721 THEN REWRITE_TAC[fan80]
7722 THEN DISCH_THEN(LABEL_TAC"yeu em")
7723 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
7724 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7725 ` (u:real^3)`] 
7726 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"))
7727 THEN MP_TAC(ARITH_RULE`&0<a==> &0<= a`) THEN RESA_TAC
7728 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`;`a:real`]
7729 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
7730 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
7731 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
7732 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
7733 THEN STRIP_TAC 
7734 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)`]
7735 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
7736 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
7737 THEN DISCH_TAC
7738 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))`]
7739 THEN REWRITE_TAC[ DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
7740 THEN REDUCE_ARITH_TAC
7741 THEN MATCH_MP_TAC REAL_LT_MUL
7742 THEN ASM_REWRITE_TAC[]
7743 THEN MATCH_MP_TAC REAL_LT_MUL
7744 THEN ASM_REWRITE_TAC[]
7745 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
7746 THEN POP_ASSUM MP_TAC
7747 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
7748 THEN ASM_REWRITE_TAC[CROSS_TRIPLE]);;
7749
7750
7751 let cross_dot_fully_surrounded1_fan_le=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.
7752 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
7753 /\ sigma_fan x V E u w = v
7754 /\ &0<a /\ a<= &1
7755 /\ fan80(x,V,E)
7756 /\ ~collinear{x,v1,u1}
7757 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
7758 /\ &0< azim x v1 v u1
7759 /\  azim x v1 v u1 < pi
7760 ==> &0< ((v1 - x) cross (u1 - x)) dot
7761   ((&1 - a) % u + a % w-x)`,
7762
7763 REPEAT STRIP_TAC
7764 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`]
7765 THEN POP_ASSUM MATCH_MP_TAC
7766 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
7767 THEN REWRITE_TAC[fan80]
7768 THEN DISCH_THEN(LABEL_TAC"yeu em")
7769 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
7770 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7771 ` (u:real^3)`] 
7772 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"))
7773 THEN MP_TAC(ARITH_RULE`&0<a==> &0<= a`) THEN RESA_TAC
7774 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`;`a:real`]
7775 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
7776 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
7777 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
7778 THEN FIND_ASSUM MP_TAC `(v1:real^3) IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
7779 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
7780 THEN STRIP_TAC 
7781 THEN SUBGOAL_THEN`~collinear {x, v1, (&1 - a) % u + a % w:real^3}` ASSUME_TAC
7782 THENL[
7783 ASM_REWRITE_TAC[collinear1_fan;]
7784 THEN FIND_ASSUM MP_TAC`~((&1 - a) % u + a % w IN aff {x, v:real^3})`
7785 THEN MATCH_MP_TAC MONO_NOT
7786 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
7787 THEN STRIP_TAC
7788 THEN POP_ASSUM MP_TAC
7789 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
7790       u' % x + v' % ((&1 - a) % u + a % w)<=>
7791 (&1-(t1+t2+t3)) % x  + (v'-t3) % ((&1 - a) % u + a % w-x) =
7792       (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
7793 THEN REDUCE_VECTOR_TAC
7794 THEN DISJ_CASES_TAC(REAL_ARITH`v' - t3= &0 \/ ~(v' - (t3:real)= &0)`)
7795 THENL[
7796 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
7797 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
7798 THEN RESA_TAC
7799 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];
7800
7801 MRESA1_TAC REAL_MUL_LINV `(v'-t3:real)`
7802 THEN STRIP_TAC
7803 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))`)
7804 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
7805 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
7806 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w - x) = (inv (v' - t3) * t2) % (v - x)<=>
7807 (&1 - a) % u + a % w  = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
7808 THEN STRIP_TAC
7809 THEN EXISTS_TAC`&1-(inv (v' - t3) * (t2:real))`
7810 THEN EXISTS_TAC`(inv (v' - t3) * (t2:real))`
7811 THEN ASM_REWRITE_TAC[]
7812 THEN REAL_ARITH_TAC];
7813
7814 POP_ASSUM MP_TAC
7815 THEN POP_ASSUM MP_TAC
7816 THEN DISCH_THEN (LABEL_TAC"A")
7817 THEN DISCH_TAC
7818 THEN REMOVE_THEN "A" MP_TAC
7819 THEN ASM_REWRITE_TAC[]
7820 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`]
7821 THEN POP_ASSUM MP_TAC
7822 THEN DISCH_THEN (LABEL_TAC"B")
7823 THEN DISCH_TAC
7824 THEN SUBGOAL_THEN`azim x v1 v ((&1 - a) % u + a % w)= pi` ASSUME_TAC
7825 THENL[
7826 POP_ASSUM MP_TAC
7827 THEN MRESA_TAC th3[`(x:real^3)` ;`v1:real^3`;` (v:real^3)`]
7828 THEN MRESA_TAC AFF_LT_2_1[`x:real^3`;`v1:real^3`;`v:real^3`]
7829 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]
7830 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[VECTOR_ARITH`A=B+C+D <=> D=A-B-C:real^3`]
7831 THEN MP_TAC(REAL_ARITH`&0<t3==> ~(t3= &0)`)
7832 THEN RESA_TAC
7833 THEN MRESA1_TAC REAL_MUL_LINV `(t3:real)`
7834 THEN STRIP_TAC
7835 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)`)
7836 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
7837 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
7838 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w) = inv t3 % (v1 - t1 % x - t2 % v)
7839 <=> (&1 - a) % u + a % w = (-- inv t3 * t1) % x + (inv t3) % v1 +(-- (inv t3* t2)) % v`]
7840 THEN STRIP_TAC
7841 THEN EXISTS_TAC`(-- inv t3 * t1):real`
7842 THEN EXISTS_TAC`(inv t3):real`
7843 THEN EXISTS_TAC`(-- (inv t3 * t2)):real`
7844 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`]
7845 THEN MATCH_MP_TAC REAL_LT_MUL
7846 THEN ASM_REWRITE_TAC[]
7847 THEN MATCH_MP_TAC REAL_LT_INV
7848 THEN ASM_REWRITE_TAC[];
7849 REMOVE_THEN "B" MP_TAC
7850 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
7851 THEN REMOVE_ASSUM_TAC
7852 THEN MP_TAC(REAL_ARITH`azim x v1 v u1 < pi==> azim x v1 v u1 <= pi`)
7853 THEN RESA_TAC
7854 THEN ASM_REWRITE_TAC[]
7855 THEN FIND_ASSUM MP_TAC`azim x v1 v (u1:real^3) < pi`
7856 THEN FIND_ASSUM MP_TAC`&0< azim x v1 v (u1:real^3) `
7857 THEN REAL_ARITH_TAC]]);;
7858
7859
7860
7861
7862
7863 let exists_cross_dot_fully_surrounded1_fan_le=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.
7864 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
7865 /\ sigma_fan x V E u w = v
7866 /\ &0<a /\ a<= &1
7867 /\ fan80(x,V,E)
7868 /\ ~collinear{x,v1,u1}
7869 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
7870 /\ &0< azim x v1 v u1
7871 /\  azim x v1 v u1 < pi
7872 ==> ?t.  &0< t/\ t < &1
7873 /\( !h:real. &0< h/\ h<t
7874 ==> &0< ((v1 - x) cross (u1 - x)) dot (((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x))`,
7875
7876 REPEAT STRIP_TAC
7877 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
7878  ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
7879 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
7880 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
7881 THEN MRESA_TAC cross_dot_fully_surrounded1_fan_le[`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`]
7882 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))`)
7883 THENL[ 
7884 EXISTS_TAC`&1/ &2`
7885 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
7886 THEN REPEAT STRIP_TAC
7887 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
7888 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
7889 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`]
7890 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`]
7891 THEN POP_ASSUM MP_TAC
7892 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7893 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7894 THEN POP_ASSUM MP_TAC
7895 THEN REAL_ARITH_TAC;
7896 MRESA_TAC REAL_LT_MUL[`a:real`;`((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`]
7897 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)`)
7898 THEN RESA_TAC
7899 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
7900 THEN MRESA1_TAC REAL_LT_INV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
7901 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)`]
7902 THEN EXISTS_TAC `min ((inv(a *(((v1 - x) cross (u1 - x)) dot (w - u)))*(((v1 - x) cross (u1 - x)) dot va)) / &2 ) (&1/ &2)`
7903 THEN STRIP_TAC
7904 THENL[POP_ASSUM MP_TAC
7905 THEN REAL_ARITH_TAC;
7906 STRIP_TAC
7907 THENL[
7908  REAL_ARITH_TAC;
7909 REPEAT STRIP_TAC
7910 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)
7911 ==>
7912 h< ((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x)) dot va)) /  &2)`)
7913 THEN RESA_TAC
7914 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)`]
7915 THEN ASM_TAC
7916 THEN ABBREV_TAC`vb=a * (((v1 - x) cross (u1 - x)) dot (w - u))`
7917 THEN REPEAT DISCH_TAC
7918 THEN POP_ASSUM MP_TAC
7919 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * (((v1 - x) cross (u1 - x)) dot va)) / &2=
7920 (vb * inv vb) * (((v1 - x) cross (u1 - x)) dot va)/ &2`]
7921 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7922 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7923 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7924 THEN POP_ASSUM MP_TAC
7925 THEN REAL_ARITH_TAC]]]);;
7926
7927
7928 let cross_dot_fully_surrounded2_fan_le=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.
7929 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
7930 /\ sigma_fan x V E u w = v
7931 /\ &0<a /\ a<= &1
7932 /\ fan80(x,V,E)
7933 /\ ~collinear{x,v1,u1}
7934 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
7935 /\ &0< azim x v1 v u1
7936 /\  azim x v1 v u1 < pi
7937 ==> &0 < (((&1 - a) % u + a % w - x) cross (v - x)) dot (u1 - x)`,
7938
7939 REPEAT STRIP_TAC
7940 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
7941 THEN REWRITE_TAC[fan80]
7942 THEN DISCH_THEN(LABEL_TAC"yeu em")
7943 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
7944 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7945 ` (u:real^3)`] 
7946 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"))
7947 THEN MP_TAC(ARITH_RULE`&0<a==> &0<= a`) THEN RESA_TAC
7948 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`;`a:real`]
7949 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
7950 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
7951 THEN MRESA1_TAC SIN_POS_PI`azim x v1 v (u1:real^3)`
7952 THEN POP_ASSUM MP_TAC
7953 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`v1:real^3`;` v:real^3`;`u1:real^3`]
7954 THEN POP_ASSUM MP_TAC
7955 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
7956 THEN DISCH_TAC
7957 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
7958 THEN MRESA_TAC JBDNJJB[`(v1-x):real^3`;`v-x:real^3`;`u1-x:real^3`]
7959 THEN POP_ASSUM MP_TAC
7960 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
7961 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
7962 THEN RESA_TAC
7963 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`]
7964 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
7965 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
7966 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
7967 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
7968 THEN STRIP_TAC 
7969 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)`])
7970 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
7971 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
7972 THEN DISCH_TAC
7973 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)`]
7974 THEN REWRITE_TAC[CROSS_LADD; CROSS_RADD; CROSS_LMUL; CROSS_RMUL;CROSS_REFL;CROSS_RNEG;CROSS_LNEG]
7975 THEN REDUCE_VECTOR_TAC
7976 THEN REWRITE_TAC[GSYM CROSS_LMUL;GSYM CROSS_LADD;DOT_LMUL]
7977 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`]);;
7978
7979
7980
7981 let exists_cross_dot_fully_surrounded2_fan_le=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.
7982 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
7983 /\ sigma_fan x V E u w = v
7984 /\ &0<a /\ a<= &1
7985 /\ fan80(x,V,E)
7986 /\ ~collinear{x,v1,u1}
7987 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
7988 /\ &0< azim x v1 v u1
7989 /\  azim x v1 v u1 < pi
7990 ==>
7991 ?t:real.  &0< t/\ t < &1
7992 /\ (!h:real. &0<h /\ h< t 
7993 ==> &0 <
7994 ((((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x) cross (v - x)) dot (u1 - x))`,
7995
7996 REPEAT STRIP_TAC
7997 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
7998  ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
7999 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
8000 THEN REWRITE_TAC[CROSS_LADD;CROSS_LMUL;DOT_LADD;DOT_LMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
8001 THEN MRESA_TAC cross_dot_fully_surrounded2_fan_le[`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`]
8002 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))`)
8003 THENL[ 
8004 EXISTS_TAC`&1/ &2`
8005 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
8006 THEN REPEAT STRIP_TAC
8007 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
8008 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
8009 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`]
8010 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`]
8011 THEN POP_ASSUM MP_TAC
8012 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
8013 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
8014 THEN POP_ASSUM MP_TAC
8015 THEN REAL_ARITH_TAC;
8016 MRESA_TAC REAL_LT_MUL[`a:real`;`((w - u) cross (v - x:real^3)) dot (u1- x:real^3)`]
8017 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)`)
8018 THEN RESA_TAC
8019 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
8020 THEN MRESA1_TAC REAL_LT_INV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
8021 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))`]
8022 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)`
8023 THEN STRIP_TAC
8024 THENL[POP_ASSUM MP_TAC
8025 THEN REAL_ARITH_TAC;
8026 STRIP_TAC
8027 THENL[
8028  REAL_ARITH_TAC;
8029 REPEAT STRIP_TAC
8030 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)
8031 ==>
8032 h< ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 )`)
8033 THEN RESA_TAC
8034 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 )`]
8035 THEN ASM_TAC
8036 THEN ABBREV_TAC`vb=a * (((w - u) cross (v - x:real^3)) dot (u1- x))`
8037 THEN REPEAT DISCH_TAC
8038 THEN POP_ASSUM MP_TAC
8039 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * ((va cross (v - x)) dot (u1 - x))) / &2=
8040 (vb * inv vb) * ((va cross (v - x)) dot (u1 - x))/ &2`]
8041 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
8042 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
8043 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
8044 THEN POP_ASSUM MP_TAC
8045 THEN REAL_ARITH_TAC]]]);;
8046
8047
8048
8049
8050
8051
8052
8053
8054 let exists_cut_small_edges_fan_le=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.
8055 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
8056 /\ sigma_fan x V E u w = v
8057 /\ &0<a /\ a<= &1
8058 /\ fan80(x,V,E)
8059 /\ ~collinear{x,v1,u1}
8060 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
8061 /\ &0< azim x v1 v u1
8062 /\  azim x v1 v u1 < pi
8063 ==>
8064 ?t:real.  &0< t/\ t < &1
8065 /\ ~(aff_gt {x} {v,(&1-t)%((&1-a)%u+ a%w)+t%u} INTER aff_gt {x} {v1,u1}={})`,
8066
8067 REPEAT STRIP_TAC
8068 THEN MRESA_TAC lie_in_half_space_and_azim_le[`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`]
8069 THEN MRESA_TAC exists_cross_dot_fully_surrounded1_fan_le[`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`]
8070 THEN POP_ASSUM MP_TAC
8071 THEN DISCH_THEN (LABEL_TAC"MA")
8072 THEN MRESA_TAC exists_cross_dot_fully_surrounded2_fan_le[`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`]
8073 THEN POP_ASSUM MP_TAC
8074 THEN DISCH_THEN (LABEL_TAC"BE NHO")
8075 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
8076 THEN REWRITE_TAC[fan80]
8077 THEN DISCH_THEN(LABEL_TAC"yeu em")
8078 THEN ABBREV_TAC`ta=min (t:real) (t':real)/ &2`
8079 THEN EXISTS_TAC `(ta:real)`
8080 THEN SUBGOAL_THEN `&0< ta:real /\ ta < &1 /\ ta< t /\ ta< t'` ASSUME_TAC
8081 THENL(*1*)[
8082 POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
8083 THEN FIND_ASSUM MP_TAC`&0<t:real`
8084 THEN FIND_ASSUM MP_TAC`t:real < &1`
8085 THEN FIND_ASSUM MP_TAC`&0<t':real`
8086 THEN FIND_ASSUM MP_TAC`t':real < &1`
8087 THEN REAL_ARITH_TAC;(*1*)
8088
8089 ASM_REWRITE_TAC[]
8090 THEN MP_TAC(ARITH_RULE`&0<a==> &0<= a`) THEN RESA_TAC
8091 THEN MP_TAC(REAL_ARITH`ta< &1 ==> &0<= (&1-ta):real`)
8092 THEN RESA_TAC
8093 THEN MRESA_TAC REAL_LE_MUL [`(&1-ta):real`;`a:real`]
8094 THEN MRESA_TAC REAL_LE_LMUL [`(&1-ta):real`;`a:real`;`&1`]
8095 THEN MP_TAC(REAL_ARITH` &0< ta /\ (&1-ta)*a<= (&1-ta)* &1 :real==> (&1-ta)*a<= &1`)
8096 THEN RESA_TAC
8097 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
8098 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
8099 ` (u:real^3)`] 
8100 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"))
8101 THEN MRESAL_TAC not_collinear_is_properties_fully_surrounded1 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`((&1-ta)*a):real`][VECTOR_ARITH`(&1 - ((&1 - ta) * a)) % u + ((&1 - ta) * a ) % w=
8102 (&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`]
8103 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`;`a:real`]
8104 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
8105 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`;`u1:real^3`;`v:real^3`]
8106 THEN POP_ASSUM MP_TAC
8107 THEN DISCH_THEN (LABEL_TAC"CON")
8108 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`;]
8109 THEN MRESA_TAC th3[`(x:real^3)` ;` (v1:real^3)`;`u1:real^3`;]
8110 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
8111 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v1:real^3)`;`(u1:real^3) `;]
8112 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3 `;]
8113 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;EXTENSION;EMPTY;IN;NOT_FORALL_THM]
8114 THEN ABBREV_TAC`a1=(v-x):real^3`
8115 THEN ABBREV_TAC`a2=(((&1-ta)%((&1-a)%u+ a%w)+ta%u)-x):real^3`
8116 THEN ABBREV_TAC`a3=(v1-x) :real^3`
8117 THEN ABBREV_TAC`a4=u1-x:real^3`
8118 THEN ABBREV_TAC`va=a1 cross a2:real^3`
8119 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
8120 THEN EXISTS_TAC`(vb:real^3) cross (va:real^3)+(x:real^3)`
8121 THEN STRIP_TAC
8122 THENL(*2*)[
8123 EXISTS_TAC`&1-(vb:real^3) dot (a2:real^3)+ vb dot (a1:real^3)`
8124 THEN EXISTS_TAC`(vb:real^3) dot (a2:real^3)`
8125 THEN EXISTS_TAC`--((vb:real^3) dot (a1:real^3))`
8126 THEN REMOVE_THEN "MA"(fun th->  MRESA1_TAC th `ta:real`)
8127 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - vb dot a2 + vb dot a1) + vb dot a2 + --(vb dot a1) = &1`]
8128 THEN SUBGOAL_THEN `&0< --((vb:real^3) dot (a1:real^3))` ASSUME_TAC
8129 THENL(*3*)[
8130 EXPAND_TAC"vb"
8131 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
8132 THEN REWRITE_TAC[DOT_LNEG]
8133 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
8134 THEN REMOVE_THEN "CON"MP_TAC
8135 THEN REAL_ARITH_TAC;(*3*)
8136
8137 ASM_REWRITE_TAC[]
8138 THEN EXPAND_TAC"va"
8139 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_MUL_LNEG]
8140 THEN EXPAND_TAC"a1"
8141 THEN EXPAND_TAC"a2"
8142 THEN VECTOR_ARITH_TAC];(*2*)
8143
8144 ONCE_REWRITE_TAC[CROSS_SKEW]
8145 THEN EXPAND_TAC"vb"
8146 THEN REWRITE_TAC[CROSS_LAGRANGE;]
8147 THEN EXISTS_TAC`&1+(va:real^3) dot (a4:real^3)- va dot (a3:real^3)`
8148 THEN EXISTS_TAC`--(va:real^3) dot (a4:real^3)`
8149 THEN EXISTS_TAC`((va:real^3) dot (a3:real^3))`
8150 THEN REMOVE_THEN "BE NHO"(fun th->  MRESA1_TAC th `ta:real`)
8151 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`;]
8152 THEN STRIP_TAC
8153 THENL(*3*)[
8154 EXPAND_TAC"va"
8155 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
8156 THEN REWRITE_TAC[DOT_LNEG]
8157 THEN POP_ASSUM MP_TAC
8158 THEN REAL_ARITH_TAC;(*3*)
8159
8160 STRIP_TAC 
8161 THENL(*4*)[
8162 EXPAND_TAC"va"
8163 THEN EXPAND_TAC"a2"
8164 THEN REWRITE_TAC[VECTOR_ARITH`((&1 - ta) % ((&1 - a) % u + a % w) + ta % u) - x
8165 =(&1 - ta) % ((&1 - a) % u + a % w-x) + ta % (u - x)`]
8166 THEN ABBREV_TAC`vu=(&1 - a) % u + a % w - x:real^3`
8167 THEN REWRITE_TAC[CROSS_RADD;CROSS_RMUL;DOT_LADD;DOT_LMUL;]
8168 THEN MRESAL_TAC coplanar_is_cross_fan[`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`;`v1:real^3`]
8169 [VECTOR_ARITH`((&1 - a) % u + a % w) - x=(&1 - a) % u + a % w - x`]
8170 THEN REDUCE_ARITH_TAC
8171 THEN MATCH_MP_TAC REAL_LT_MUL
8172 THEN ASM_REWRITE_TAC[];(*4*)
8173 EXPAND_TAC"a3"
8174 THEN EXPAND_TAC"a4"
8175 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)`]
8176 THEN VECTOR_ARITH_TAC]]]]);;
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192 let AFF_GT_CUT_XFAN_IMP_EDGE_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.
8193 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
8194 /\ sigma_fan x V E u w = v
8195 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
8196 /\ fan80(x,V,E)
8197 /\  ~(aff_gt{x} {v,w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
8198 ==> {v,w} IN E`,
8199
8200
8201 REPEAT STRIP_TAC
8202 THEN POP_ASSUM MP_TAC
8203 THEN POP_ASSUM MP_TAC
8204 THEN POP_ASSUM MP_TAC
8205 THEN DISCH_THEN(LABEL_TAC"EM")
8206 THEN DISCH_TAC
8207 THEN POP_ASSUM (fun th-> MP_TAC (th) THEN ASSUME_TAC(th))
8208 THEN REWRITE_TAC[fan80]
8209 THEN DISCH_THEN(LABEL_TAC"BE")
8210 THEN DISCH_THEN(LABEL_TAC"YEU")
8211 THEN POP_ASSUM MP_TAC
8212 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?x'. x' IN A`;INTER;IN_ELIM_THM]
8213 THEN STRIP_TAC 
8214 THEN POP_ASSUM MP_TAC
8215 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
8216 THEN POP_ASSUM MP_TAC
8217 THEN POP_ASSUM MP_TAC
8218 THEN DISCH_THEN(LABEL_TAC"A")
8219 THEN DISCH_TAC
8220 THEN REMOVE_THEN "A" MP_TAC
8221 THEN POP_ASSUM(fun th->REWRITE_TAC[(th)])
8222 THEN POP_ASSUM MP_TAC
8223 THEN DISCH_THEN(LABEL_TAC"A")
8224 THEN DISCH_TAC
8225 THEN REMOVE_THEN "A" MP_TAC
8226 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") )
8227 THEN MRESAL_TAC not_collinear_is_properties_fully_surrounded1 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`][REAL_ARITH`&0<= &1/\ &1<= &1 `;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
8228 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(w:real^3)`;]
8229 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
8230 ` (v:real^3)`]
8231 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
8232 ` (v':real^3)`]  
8233 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
8234 THEN POP_ASSUM MP_TAC
8235 THEN DISCH_THEN(LABEL_TAC "VUT1")
8236 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
8237 THEN POP_ASSUM MP_TAC
8238 THEN DISCH_THEN(LABEL_TAC "VUT")
8239 THEN REPEAT STRIP_TAC
8240 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
8241 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
8242 THEN DISCH_THEN(LABEL_TAC "VUT1")
8243 THEN DISCH_TAC THEN DISCH_TAC
8244 THEN DISJ_CASES_TAC(REAL_ARITH`(t3'= &0) \/ ~(t3':real= &0)`)
8245 THENL(*1*)[
8246
8247 ASM_REWRITE_TAC[]
8248 THEN REDUCE_ARITH_TAC
8249 THEN REDUCE_VECTOR_TAC
8250 THEN DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
8251 THENL(*2*)[
8252 ASM_REWRITE_TAC[]
8253 THEN REDUCE_ARITH_TAC
8254 THEN REDUCE_VECTOR_TAC
8255 THEN DISCH_TAC
8256 THEN ASM_REWRITE_TAC[]
8257 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
8258 THEN RESA_TAC
8259 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
8260 THEN RESA_TAC
8261 THEN ASM_REWRITE_TAC[]
8262 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM(th)])`t1 + t2 + t3 = &1:real`
8263 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % w =
8264  (t1 + t2 + t3) % x<=>(t3) % (w- x)=(-- t2) % (v-x) `]
8265 THEN STRIP_TAC
8266 THEN MP_TAC(SET_RULE`
8267 (t3) % (w- x)=(-- t2) % (v-x)
8268 ==> (inv (t3))%((t3) % (w- x) ) = (inv (t3))%((-- t2) % (v-x)):real^3`)
8269 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8270 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;]
8271 THEN REDUCE_VECTOR_TAC
8272 THEN REWRITE_TAC[VECTOR_ARITH`A-B=C%(D-B)<=>A=(&1-C)%B+C%D`;]
8273 THEN STRIP_TAC
8274 THEN FIND_ASSUM MP_TAC `~(w IN aff {x, v:real^3})`
8275 THEN ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM]
8276 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
8277 THEN STRIP_TAC
8278 THEN EXISTS_TAC`&1-(inv t3 * (--t2)):real`
8279 THEN EXISTS_TAC`(inv t3 * (--t2)):real`
8280 THEN ASM_REWRITE_TAC[]
8281 THEN REAL_ARITH_TAC
8282 ;(*2*)
8283
8284 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
8285 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
8286 THEN DISCH_THEN(LABEL_TAC"MAI")
8287 THEN DISCH_THEN (LABEL_TAC"YEU EM")
8288 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % w =
8289  (&1 - t2') % x + t2' % v'<=> t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % w:real^3 `]
8290 THEN MP_TAC(ISPEC`(t2':real)`REAL_MUL_LINV)
8291 THEN RESA_TAC
8292 THEN STRIP_TAC
8293 THEN MP_TAC(SET_RULE`
8294 t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % w:real^3
8295 ==> (inv (t2'))%(t2' % v' ) = (inv (t2'))%((t2' - t2 - t3) % x + t2 % v + t3 % w:real^3)
8296 `)
8297 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8298 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`]
8299 THEN REDUCE_VECTOR_TAC
8300 THEN DISCH_TAC
8301 THEN SUBGOAL_THEN `~coplanar{x:real^3,v':real^3,v:real^3,u:real^3}` ASSUME_TAC
8302 THENL(*3*)[
8303
8304 POP_ASSUM MP_TAC
8305 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v', v, u}= {(--x) +x, (--x) +v', (--x) +v, (--x) +u}`)
8306 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`]
8307 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
8308 THEN DISCH_TAC
8309 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
8310                          (inv t2' * t2) % v +
8311                          (inv t2' * t3) % w) -
8312                         x=(inv t2' * t2) % (v-x) +
8313                          (inv t2' * t3) % (w-x)`])
8314 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==>  &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
8315 THEN REMOVE_THEN"MAI" MP_TAC
8316 THEN DISCH_TAC
8317 THEN REMOVE_ASSUM_TAC
8318 THEN RESA_TAC
8319 THEN POP_ASSUM MP_TAC
8320 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
8321 THEN RESA_TAC
8322 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
8323 THEN RESA_TAC
8324 THEN STRIP_TAC
8325 THEN MP_TAC(SET_RULE`
8326 t2 + t3 = &1 - t1:real
8327 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
8328 `)
8329
8330 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8331 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
8332 THEN STRIP_TAC
8333 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
8334 THEN RESA_TAC
8335 THEN MRESA_TAC REAL_LT_MUL[`t2':real`;`inv (&1- t1):real`]
8336 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
8337 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
8338 THEN MP_TAC(REAL_ARITH`&0< (t2') * inv (&1- t1) ==> ~((t2')* inv(&1- t1)= &0)`)
8339 THEN RESA_TAC
8340 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
8341 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) % (w - x):real^3`]
8342 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
8343 THEN REDUCE_VECTOR_TAC
8344 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+D)=A%B+A%D`;
8345 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
8346 THEN REDUCE_ARITH_TAC
8347 THEN DISCH_TAC
8348 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`]
8349 THEN POP_ASSUM MP_TAC
8350 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8351 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, w}= {(--x) +x, (--x) +v, (--x) +u, (--x) + w}`)
8352 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`]
8353 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
8354 THEN DISCH_TAC
8355 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8356 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` w-x:real^3`]
8357 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
8358 ;(*3*)
8359
8360
8361 POP_ASSUM MP_TAC
8362 THEN POP_ASSUM MP_TAC
8363 THEN DISCH_THEN (LABEL_TAC"DICH")
8364 THEN DISCH_TAC
8365 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
8366 THEN RESA_TAC
8367 THEN MRESA1_TAC REAL_LT_INV`t2':real`
8368 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
8369 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
8370 THEN SUBGOAL_THEN `(v':real^3) IN aff_gt {x} {v,w:real^3}` ASSUME_TAC
8371 THENL(*4*)[
8372
8373 ASM_REWRITE_TAC[IN_ELIM_THM]
8374 THEN EXISTS_TAC`(&1 - inv t2' * t2 - inv t2' * t3:real)`
8375 THEN EXISTS_TAC`inv t2' * t2:real`
8376 THEN EXISTS_TAC`(inv t2' * t3:real)`
8377 THEN ASM_REWRITE_TAC[]
8378 THEN REAL_ARITH_TAC;(*4*)
8379
8380
8381 REMOVE_THEN "DICH" MP_TAC
8382 THEN REMOVE_THEN "VUT" MP_TAC
8383 THEN DISCH_TAC
8384 THEN REMOVE_ASSUM_TAC
8385 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
8386 THEN MRESA_TAC exists_element_in_half_sapace_fan
8387 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
8388 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
8389 ` (v':real^3)`]
8390 THEN MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1`;`v':real^3`;`u':real^3`][REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
8391 THEN DISCH_TAC
8392 THEN REMOVE_ASSUM_TAC
8393 THEN MRESAL_TAC not_cut_in_edges_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
8394 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8395       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
8396       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8397       aff_ge {x} e =
8398       {}`]
8399 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v',u':real^3}`)
8400 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
8401 THEN POP_ASSUM MP_TAC
8402 THEN POP_ASSUM MP_TAC
8403 THEN POP_ASSUM MP_TAC
8404 THEN SET_TAC[]
8405
8406 ](*4*)](*3*)](*2*);(*1*)
8407
8408
8409 DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
8410
8411 THENL(*2*)[
8412
8413 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
8414 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
8415 THEN DISCH_THEN(LABEL_TAC"MAI")
8416 THEN DISCH_THEN (LABEL_TAC"YEU EM")
8417 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % w =
8418  (&1 - &0 - t3') % x + &0% v'+t3' % w'<=> t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % w:real^3 `]
8419 THEN MP_TAC(ISPEC`(t3':real)`REAL_MUL_LINV)
8420 THEN RESA_TAC
8421 THEN STRIP_TAC
8422 THEN MP_TAC(SET_RULE`
8423 t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % w:real^3
8424 ==> (inv (t3'))%(t3' % w' ) = (inv (t3'))%((t3' - t2 - t3) % x + t2 % v + t3 % w:real^3)
8425 `)
8426 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8427 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`]
8428 THEN REDUCE_VECTOR_TAC
8429 THEN DISCH_TAC
8430 THEN SUBGOAL_THEN `~coplanar{x:real^3,w':real^3,v:real^3,u:real^3}` ASSUME_TAC
8431 THENL(*3*)[
8432
8433  POP_ASSUM MP_TAC
8434 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, w', v, u}= {(--x) +x, (--x) +w', (--x) +v, (--x) +u}`)
8435 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`]
8436 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
8437 THEN DISCH_TAC
8438 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
8439                          (inv t2' * t2) % v +
8440                          (inv t2' * t3) % w) -
8441                         x=(inv t2' * t2) % (v-x) +
8442                          (inv t2' * t3) % (w-x)`])
8443 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==>  &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
8444 THEN REMOVE_THEN"MAI" MP_TAC
8445 THEN DISCH_TAC
8446 THEN REMOVE_ASSUM_TAC
8447 THEN RESA_TAC
8448 THEN POP_ASSUM MP_TAC
8449 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
8450 THEN RESA_TAC
8451 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
8452 THEN RESA_TAC
8453 THEN STRIP_TAC
8454 THEN MP_TAC(SET_RULE`
8455 t2 + t3 = &1 - t1:real
8456 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
8457 `)
8458 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8459 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
8460 THEN STRIP_TAC
8461 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
8462 THEN RESA_TAC
8463 THEN MRESA_TAC REAL_LT_MUL[`t3':real`;`inv (&1- t1):real`]
8464 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
8465 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
8466 THEN MP_TAC(REAL_ARITH`&0< (t3') * inv (&1- t1) ==> ~((t3')* inv(&1- t1)= &0)`)
8467 THEN RESA_TAC
8468 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
8469 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) % (w - x):real^3`]
8470 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
8471 THEN REDUCE_VECTOR_TAC
8472 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+D)=A%B+A%D`;
8473 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
8474 THEN REDUCE_ARITH_TAC
8475 THEN DISCH_TAC
8476 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`]
8477 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8478 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +w}`)
8479 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`]
8480 THEN POP_ASSUM MP_TAC
8481 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8482 THEN RESA_TAC
8483 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` w-x:real^3`]
8484 THEN POP_ASSUM MP_TAC
8485 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8486 THEN RESA_TAC
8487 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
8488
8489 ;(*3*)
8490
8491
8492 POP_ASSUM MP_TAC
8493 THEN POP_ASSUM MP_TAC
8494 THEN DISCH_THEN (LABEL_TAC"DICH")
8495 THEN DISCH_TAC
8496 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
8497 THEN RESA_TAC
8498 THEN MRESA1_TAC REAL_LT_INV`t3':real`
8499 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
8500 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
8501 THEN SUBGOAL_THEN `(w':real^3) IN aff_gt {x} {v,w:real^3}` ASSUME_TAC
8502 THENL(*4*)[
8503
8504 ASM_REWRITE_TAC[IN_ELIM_THM]
8505 THEN EXISTS_TAC`(&1 - inv t3' * t2 - inv t3' * t3:real)`
8506 THEN EXISTS_TAC`inv t3' * t2:real`
8507 THEN EXISTS_TAC`(inv t3' * t3:real)`
8508 THEN ASM_REWRITE_TAC[]
8509 THEN REAL_ARITH_TAC;(*4*)
8510
8511 REMOVE_THEN "DICH" MP_TAC
8512 THEN REMOVE_THEN "VUT" MP_TAC
8513 THEN DISCH_TAC
8514 THEN REMOVE_ASSUM_TAC
8515 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
8516 ` (w':real^3)`]
8517 THEN POP_ASSUM MP_TAC
8518 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8519 THEN RESA_TAC
8520 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
8521 THEN MRESA_TAC exists_element_in_half_sapace_fan
8522 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
8523 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
8524 ` (w':real^3)`]
8525 THEN MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1`;`w':real^3`;`u':real^3`][REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
8526 THEN DISCH_TAC
8527 THEN REMOVE_ASSUM_TAC
8528 THEN MRESAL_TAC not_cut_in_edges_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
8529 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8530       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
8531       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8532       aff_ge {x} e =
8533       {}`]
8534 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{w',u':real^3}`)
8535 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
8536 THEN POP_ASSUM MP_TAC
8537 THEN POP_ASSUM MP_TAC
8538 THEN POP_ASSUM MP_TAC
8539 THEN SET_TAC[]](*4*)](*3*);(*2*)
8540
8541
8542
8543
8544
8545
8546 ASM_REWRITE_TAC[]
8547 THEN DISCH_TAC THEN DISCH_THEN(LABEL_TAC"BO")
8548 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
8549 THEN RESA_TAC
8550 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
8551 THEN RESA_TAC
8552 THEN MRESA1_TAC REAL_LT_INV`t2':real`
8553 THEN MRESA1_TAC REAL_MUL_LINV`t2':real`
8554 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
8555 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
8556 THEN MRESA1_TAC REAL_LT_INV`t3':real`
8557 THEN MRESA1_TAC REAL_MUL_LINV`t3':real`
8558 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
8559 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
8560 THEN SUBGOAL_THEN`(x':real^3) IN aff_gt {x} {v',w'}` ASSUME_TAC
8561 THENL(*3*)[
8562 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
8563 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8564 THEN EXISTS_TAC`t1':real`
8565 THEN EXISTS_TAC`t2':real`
8566 THEN EXISTS_TAC`t3':real`
8567 THEN ASM_REWRITE_TAC[]
8568 ;(*3*)
8569
8570
8571 SUBGOAL_THEN`(x':real^3) IN aff_ge {x} {v',w'}` ASSUME_TAC
8572 THENL(*4*)[
8573 ASM_REWRITE_TAC[IN_ELIM_THM]
8574 THEN EXISTS_TAC`t1':real`
8575 THEN EXISTS_TAC`t2':real`
8576 THEN EXISTS_TAC`t3':real`
8577 THEN ASM_REWRITE_TAC[];(*4*)
8578
8579 SUBGOAL_THEN `(x':real^3) IN aff_gt {x} {v,w:real^3}` ASSUME_TAC
8580
8581 THENL(*5*)[
8582 ASM_REWRITE_TAC[IN_ELIM_THM]
8583 THEN EXISTS_TAC`t1:real`
8584 THEN EXISTS_TAC`t2:real`
8585 THEN EXISTS_TAC`t3:real`
8586 THEN ASM_REWRITE_TAC[]
8587 THEN REAL_ARITH_TAC;(*5*)
8588
8589 SUBGOAL_THEN `(x':real^3) IN aff_ge {x} {v,w:real^3}` ASSUME_TAC
8590 THENL(*6*)[
8591 MRESA_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`w:real^3`]
8592 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8593 THEN EXISTS_TAC`t1:real`
8594 THEN EXISTS_TAC`t2:real`
8595 THEN EXISTS_TAC`t3:real`
8596 THEN MP_TAC(REAL_ARITH`&0< t2==> &0 <= t2`) THEN RESA_TAC
8597 THEN MP_TAC(REAL_ARITH`&0< t3==> &0 <= t3`) THEN RESA_TAC
8598 THEN ASM_REWRITE_TAC[];(*6*)
8599
8600
8601 FIND_ASSUM MP_TAC`{v',w':real^3} IN E`
8602 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8603 THEN DISCH_TAC
8604 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
8605 ` (w':real^3)`]  
8606 THEN SUBGOAL_THEN `~collinear {x, x', w':real^3}` ASSUME_TAC
8607 THENL(*7*)[
8608
8609 ASM_REWRITE_TAC[collinear1_fan;]
8610 THEN FIND_ASSUM MP_TAC `~((v':real^3) IN aff{x,w'})`
8611 THEN MATCH_MP_TAC MONO_NOT
8612 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
8613 THEN STRIP_TAC
8614 THEN POP_ASSUM MP_TAC
8615 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % w'
8616 <=> t2' % v' = (u'-t1') % x + (v''-t3') % w'`]
8617 THEN STRIP_TAC
8618 THEN MP_TAC(SET_RULE`
8619 t2' % v' = (u'-t1') % x + (v''-t3') % w':real^3
8620 ==> (inv ( t2'))%(t2' % v') = (inv (t2'))%((u'-t1') % x + (v''-t3') % w')
8621 `)
8622 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8623 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
8624 THEN REDUCE_VECTOR_TAC
8625 THEN STRIP_TAC
8626 THEN EXISTS_TAC `(inv t2' * (u' - t1':real))`
8627 THEN EXISTS_TAC `(inv t2' * (v'' - t3':real))`
8628 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'`]
8629 ;(*7*)
8630
8631
8632
8633 SUBGOAL_THEN `~collinear {x, x', v':real^3}` ASSUME_TAC
8634
8635 THENL(*8*)[
8636 ASM_REWRITE_TAC[collinear1_fan;]
8637 THEN FIND_ASSUM MP_TAC `~((w':real^3) IN aff{x,v'})`
8638 THEN MATCH_MP_TAC MONO_NOT
8639 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
8640 THEN STRIP_TAC
8641 THEN POP_ASSUM MP_TAC
8642 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
8643 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
8644 THEN STRIP_TAC
8645 THEN MP_TAC(SET_RULE`
8646 t3' % w' = (u'-t1') % x + (v''-t2') % v':real^3
8647 ==> (inv ( t3'))%(t3' % w') = (inv (t3'))%((u'-t1') % x + (v''-t2') % v')
8648 `)
8649 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8650 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
8651 THEN REDUCE_VECTOR_TAC
8652 THEN STRIP_TAC
8653 THEN EXISTS_TAC `(inv t3' * (u' - t1':real))`
8654 THEN EXISTS_TAC `(inv t3' * (v'' - t2':real))`
8655 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'`]
8656 ;(*8*)
8657
8658
8659
8660 SUBGOAL_THEN`~collinear {x, x', w:real^3}` ASSUME_TAC
8661
8662 THENL(*9*)[
8663 REMOVE_THEN "BO" MP_TAC
8664 THEN DISCH_TAC THEN REMOVE_ASSUM_TAC
8665 THEN ASM_REWRITE_TAC[collinear1_fan;]
8666 THEN FIND_ASSUM MP_TAC`~(w IN aff {x, v:real^3})`
8667 THEN MATCH_MP_TAC MONO_NOT
8668 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
8669 THEN STRIP_TAC
8670 THEN POP_ASSUM MP_TAC
8671 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % (va) =
8672       u' % x + v' % (va)<=>
8673 (&1-(t1+t2+t3)) % x  + (v'-t3) % (va-x) =
8674       (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
8675 THEN REDUCE_VECTOR_TAC
8676 THEN DISJ_CASES_TAC(REAL_ARITH`(v'' - t3 = &0) \/ ~(v'' - (t3:real)= &0)`)
8677 THENL(*10*)[
8678 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
8679 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
8680 THEN RESA_TAC
8681 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];(*10*)
8682
8683 MRESA1_TAC REAL_MUL_LINV `(v''-t3:real)`
8684 THEN STRIP_TAC
8685 THEN MP_TAC(SET_RULE`(v'' - t3) % (w- x) = t2 % (v - x:real^3) ==> (inv (v'' -t3)) % ((v'' - t3) % (w - x)) = (inv (v'' -t3)) % ( t2 % (v - x))`)
8686 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
8687 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
8688 THEN REWRITE_TAC[VECTOR_ARITH`&1 % (va - x) = (inv (v' - t3) * t2) % (v - x)<=>
8689 va  = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
8690 THEN STRIP_TAC
8691 THEN EXISTS_TAC`&1-(inv (v'' - t3) * (t2:real))`
8692 THEN EXISTS_TAC`(inv (v'' - t3) * (t2:real))`
8693 THEN ASM_REWRITE_TAC[]
8694 THEN REAL_ARITH_TAC](*10*);(*9*)
8695
8696 SUBGOAL_THEN `~collinear {x, x', v:real^3}` ASSUME_TAC
8697 THENL(*10*)[
8698 REMOVE_THEN "BO" MP_TAC
8699 THEN DISCH_TAC
8700 THEN REMOVE_ASSUM_TAC
8701 THEN ASM_REWRITE_TAC[collinear1_fan]
8702 THEN FIND_ASSUM MP_TAC `~(w IN aff {x, v:real^3})`
8703 THEN MATCH_MP_TAC MONO_NOT
8704 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
8705 THEN STRIP_TAC
8706 THEN POP_ASSUM MP_TAC
8707 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
8708 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
8709 THEN MP_TAC(REAL_ARITH`&0< t3 ==> ~(t3= &0)`)
8710 THEN RESA_TAC
8711 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
8712 THEN STRIP_TAC
8713 THEN MP_TAC(SET_RULE`
8714 t3 % w = (u'-t1) % x + (v''-t2) % v:real^3
8715 ==> (inv ( t3))%(t3 % w) = (inv (t3))%((u'-t1) % x + (v''-t2) % v)
8716 `)
8717 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8718 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
8719 THEN REDUCE_VECTOR_TAC
8720 THEN STRIP_TAC
8721 THEN EXISTS_TAC `(inv t3 * (u' - t1:real))`
8722 THEN EXISTS_TAC `(inv t3 * (v'' - t2:real))`
8723 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'`]
8724 ;(*10*)
8725
8726 REMOVE_THEN "VUT1" MP_TAC
8727 THEN REMOVE_THEN "VUT1" MP_TAC
8728 THEN REMOVE_THEN "BO" MP_TAC
8729 THEN REMOVE_THEN "VUT" MP_TAC
8730 THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC
8731 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
8732 THEN DISJ_CASES_TAC(SET_RULE`(&0 < azim x (x':real^3) v w' /\
8733       azim x (x') v w' < pi)\/ ~(&0 < azim x (x') v w' /\
8734       azim x (x') v w' < pi)`)
8735 THENL(*11*)[
8736 MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`;`x':real^3`;`w':real^3`][REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
8737 THEN MRESAL_TAC not_cut_in_edges_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
8738 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8739       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
8740       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8741       aff_ge {x} e =
8742       {}`]
8743 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v',w':real^3}`)
8744 THEN MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
8745 THEN POP_ASSUM MP_TAC
8746 THEN POP_ASSUM MP_TAC
8747 THEN POP_ASSUM MP_TAC
8748 THEN SET_TAC[]
8749 ;(*11*)
8750
8751 ASSUME_TAC(ISPECL[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]azim)
8752 THEN ASSUME_TAC(PI_WORKS)
8753 THEN MP_TAC(REAL_ARITH`~(&0 < azim x x' v w' /\ azim x x' v w' < pi)/\
8754 &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) `)
8755 THEN ASM_REWRITE_TAC[]
8756 THEN STRIP_TAC
8757 THENL(*12*)(*3GOAL*)[
8758
8759 POP_ASSUM MP_TAC
8760 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
8761 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
8762 THEN DISCH_TAC
8763 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'`)
8764 THEN RESA_TAC
8765 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
8766 THEN POP_ASSUM MP_TAC
8767 THEN REMOVE_ASSUM_TAC
8768 THEN POP_ASSUM MP_TAC
8769 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
8770 THEN DISCH_TAC THEN DISCH_TAC
8771 THEN MP_TAC(REAL_ARITH`pi < azim x x' v w' /\ azim x x' v w' = azim x x' v v' + pi
8772 /\  azim x x' v w' < &2 * pi==> &0 <azim x x' v v' /\ azim x x' v v' < pi`)
8773 THEN RESA_TAC
8774 THEN MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`;`x':real^3`;`v':real^3`][REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
8775 THEN MRESAL_TAC not_cut_in_edges_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
8776 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8777       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
8778       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8779       aff_ge {x} e =
8780       {}`]
8781 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{w',v':real^3}`)
8782 THEN MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`w':real^3`;`v':real^3`;`x':real^3`]
8783 THEN POP_ASSUM MP_TAC
8784 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
8785 THEN ASM_REWRITE_TAC[]
8786 THEN POP_ASSUM MP_TAC
8787 THEN POP_ASSUM MP_TAC
8788 THEN SET_TAC[];(*12*)
8789
8790 MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
8791 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
8792 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
8793 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
8794 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,w:real^3}\/ ~(w' IN aff_gt {x} {v,w:real^3})`)
8795 THENL(*13*)[
8796
8797 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
8798 THEN POP_ASSUM MP_TAC
8799 THEN POP_ASSUM MP_TAC
8800 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
8801 THEN DISCH_TAC
8802 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
8803  THEN ASSUME_TAC(th))
8804 THEN STRIP_TAC 
8805 THEN POP_ASSUM MP_TAC
8806 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
8807  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
8808 THEN REDUCE_VECTOR_TAC
8809 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
8810 THEN RESA_TAC
8811 THEN POP_ASSUM MP_TAC
8812 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
8813 THEN RESA_TAC
8814 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
8815 THEN RESA_TAC
8816 THEN STRIP_TAC
8817 THEN MP_TAC(SET_RULE`
8818 t2'' + t3'' = &1 - t1'':real
8819 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
8820 `)
8821 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8822 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
8823 THEN STRIP_TAC
8824 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
8825 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
8826 THEN RESA_TAC
8827 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
8828 THEN RESA_TAC
8829 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
8830 THEN STRIP_TAC
8831 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`]
8832 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, w}= {(--x) +x, (--x) +v, (--x) +u, (--x) + w}`)
8833 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`]
8834 THEN POP_ASSUM MP_TAC
8835 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8836 THEN ASM_REWRITE_TAC[]
8837 THEN DISCH_TAC
8838 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` w-x:real^3`]
8839 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)`])
8840 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
8841 [VECTOR_ARITH`&1 %A=A`]
8842 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
8843 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`]
8844 THEN POP_ASSUM MP_TAC
8845 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8846 THEN ASM_REWRITE_TAC[]
8847 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
8848 THEN DISCH_TAC
8849 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
8850 THEN MRESA_TAC exists_element_in_half_sapace_fan
8851 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
8852 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
8853 ` (w':real^3)`]
8854 THEN MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`;`w':real^3`;`u':real^3`][REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
8855 THEN MRESAL_TAC not_cut_in_edges_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
8856 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8857       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
8858       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8859       aff_ge {x} e =
8860       {}`]
8861 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{w',u':real^3}`)
8862 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`;]
8863 THEN POP_ASSUM MP_TAC
8864 THEN POP_ASSUM MP_TAC
8865 THEN POP_ASSUM MP_TAC
8866 THEN SET_TAC[];(*13*)
8867
8868
8869 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,w:real^3}\/ ~(v' IN aff_gt {x} {v,w:real^3})`)
8870 THENL(*14*)[
8871
8872 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
8873 THEN POP_ASSUM MP_TAC
8874 THEN POP_ASSUM MP_TAC
8875 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
8876 THEN DISCH_TAC
8877 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
8878  THEN ASSUME_TAC(th))
8879 THEN STRIP_TAC 
8880 THEN POP_ASSUM MP_TAC
8881 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
8882  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
8883 THEN REDUCE_VECTOR_TAC
8884 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
8885 THEN RESA_TAC
8886 THEN POP_ASSUM MP_TAC
8887 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
8888 THEN RESA_TAC
8889 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
8890 THEN RESA_TAC
8891 THEN STRIP_TAC
8892 THEN MP_TAC(SET_RULE`
8893 t2'' + t3'' = &1 - t1'':real
8894 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
8895 `)
8896 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8897 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
8898 THEN STRIP_TAC
8899 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
8900 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
8901 THEN RESA_TAC
8902 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
8903 THEN RESA_TAC
8904 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
8905 THEN STRIP_TAC
8906 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`]
8907 THEN POP_ASSUM MP_TAC
8908 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8909 THEN STRIP_TAC
8910 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +w}`)
8911 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`]
8912 THEN POP_ASSUM MP_TAC
8913 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8914 THEN STRIP_TAC
8915 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` w-x:real^3`]
8916 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)`])
8917 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
8918 [VECTOR_ARITH`&1 %A=A`]
8919 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
8920 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`]
8921 THEN POP_ASSUM MP_TAC
8922 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
8923 THEN ASM_REWRITE_TAC[]
8924 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
8925 THEN DISCH_TAC
8926 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
8927 THEN MRESA_TAC exists_element_in_half_sapace_fan
8928 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
8929 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
8930 ` (v':real^3)`]
8931 THEN MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`;`v':real^3`;`u':real^3`][REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
8932 THEN MRESAL_TAC not_cut_in_edges_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
8933 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8934       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
8935       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
8936       aff_ge {x} e =
8937       {}`]
8938 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v',u':real^3}`)
8939 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`;]
8940 THEN POP_ASSUM MP_TAC
8941 THEN POP_ASSUM MP_TAC
8942 THEN POP_ASSUM MP_TAC
8943 THEN SET_TAC[];(*14*)
8944
8945
8946 SUBGOAL_THEN`~(w' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
8947
8948 THENL(*15*)[
8949 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8950 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`w:real^3`;`x':real^3`]
8951 THEN POP_ASSUM MP_TAC
8952 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
8953 THEN ASM_REWRITE_TAC[]
8954 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
8955 THEN SET_TAC[]
8956 ;(*15*)
8957
8958 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`] decomposition_planar_by_angle_fan)
8959 THEN ASM_REWRITE_TAC[]
8960 THEN STRIP_TAC
8961 THENL(*16*)[
8962 MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
8963 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'}
8964 ==>v IN aff_ge {x} {v', w':real^3}`)
8965 THEN RESA_TAC
8966 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)
8967 THEN ASM_REWRITE_TAC[]
8968 THEN STRIP_TAC
8969 THENL(*17*)[
8970
8971 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
8972 THEN POP_ASSUM MP_TAC
8973 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
8974 THEN MP_TAC(PI_WORKS)
8975 THEN REAL_ARITH_TAC;(*17*)
8976
8977 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
8978 THEN POP_ASSUM MP_TAC
8979 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] 
8980 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
8981 THEN DISCH_TAC
8982 THEN REWRITE_TAC[th])
8983 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
8984 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
8985 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`w:real^3`;`v':real^3`]
8986 THEN POP_ASSUM MP_TAC
8987 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
8988 THEN DISCH_TAC
8989 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w:real^3`;`v':real^3`]
8990 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`w:real^3`] decomposition_planar_by_angle_fan)
8991 THEN ASM_REWRITE_TAC[]
8992 THEN STRIP_TAC
8993 THENL(*18*)[
8994
8995 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
8996 THEN ASM_TAC THEN SET_TAC[];(*18*)
8997
8998 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
8999 THEN POP_ASSUM MP_TAC
9000 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
9001 THEN ASM_REWRITE_TAC[]
9002 THEN POP_ASSUM MP_TAC
9003 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9004 THEN STRIP_TAC THEN STRIP_TAC
9005 THEN MP_TAC(SET_RULE`w IN aff_ge {x} {v', x':real^3} /\ aff_ge {x} {v', x'} SUBSET aff_ge {x} {v', w'}
9006 ==>w IN aff_ge {x} {v', w':real^3}`)
9007 THEN RESA_TAC
9008 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `w:real^3`; `u:real^3`; `v':real^3`;`w':real^3`]properties_of_fan7)
9009 THEN ASM_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9010 THEN STRIP_TAC
9011 THENL(*19*)[ ASM_REWRITE_TAC[];(*19*)
9012 POP_ASSUM MP_TAC 
9013 THEN REMOVE_ASSUM_TAC
9014 THEN REMOVE_ASSUM_TAC
9015 THEN REMOVE_ASSUM_TAC
9016 THEN REMOVE_ASSUM_TAC
9017 THEN REMOVE_ASSUM_TAC
9018 THEN REMOVE_ASSUM_TAC
9019 THEN REMOVE_ASSUM_TAC
9020 THEN REMOVE_ASSUM_TAC
9021 THEN POP_ASSUM MP_TAC 
9022 THEN DISCH_THEN(LABEL_TAC "XONG")
9023 THEN DISCH_TAC
9024 THEN REMOVE_THEN "XONG" MP_TAC
9025 THEN ASM_REWRITE_TAC[]
9026 THEN MP_TAC PI_WORKS
9027 THEN REAL_ARITH_TAC
9028 ](*19*)](*18*)](*17*);(*16*)
9029
9030 POP_ASSUM MP_TAC
9031 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9032 THEN DISCH_TAC
9033 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
9034 THEN POP_ASSUM MP_TAC
9035 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9036 THEN ASM_REWRITE_TAC[]
9037 THEN DISCH_TAC
9038 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}`)
9039 THEN RESA_TAC
9040 THEN POP_ASSUM MP_TAC
9041 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
9042 THEN POP_ASSUM MP_TAC
9043 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
9044 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
9045 THEN STRIP_TAC
9046 THEN ASM_REWRITE_TAC[]
9047 THEN STRIP_TAC
9048 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)
9049 THEN ASM_REWRITE_TAC[]
9050 THEN STRIP_TAC
9051 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
9052 THEN DISCH_TAC
9053 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
9054 THEN SUBGOAL_THEN`v IN aff_ge {x} {v', w':real^3}`ASSUME_TAC
9055 THENL(*17*)[
9056 POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];(*17*)
9057
9058 POP_ASSUM MP_TAC
9059 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
9060 THEN POP_ASSUM MP_TAC
9061 THEN DISCH_THEN (LABEL_TAC"NHAT")
9062 THEN DISCH_TAC
9063 THEN REMOVE_THEN "NHAT" MP_TAC
9064 THEN DISCH_TAC
9065 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
9066 THEN POP_ASSUM MP_TAC
9067 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)]
9068 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
9069 THEN STRIP_TAC THEN REWRITE_TAC[th])
9070 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
9071 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
9072 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`w:real^3`;`v':real^3`]
9073 THEN POP_ASSUM MP_TAC
9074 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
9075 THEN DISCH_TAC
9076 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w:real^3`;`v':real^3`]
9077 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`w:real^3`] decomposition_planar_by_angle_fan)
9078 THEN ASM_REWRITE_TAC[]
9079 THEN STRIP_TAC
9080 THENL(*18*)[
9081
9082 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
9083 THEN ASM_TAC THEN SET_TAC[];(*18*)
9084
9085 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
9086 THEN POP_ASSUM MP_TAC
9087 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
9088 THEN ASM_REWRITE_TAC[]
9089 THEN POP_ASSUM MP_TAC
9090 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9091 THEN STRIP_TAC THEN STRIP_TAC
9092 THEN MP_TAC(SET_RULE`w IN aff_ge {x} {v', x':real^3} /\ aff_ge {x} {v', x'} SUBSET aff_ge {x} {v', w'}
9093 ==>w IN aff_ge {x} {v', w':real^3}`)
9094 THEN RESA_TAC
9095 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `w:real^3`; `u:real^3`; `v':real^3`;`w':real^3`]properties_of_fan7)
9096 THEN ASM_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9097 THEN STRIP_TAC
9098 THENL(*19*)[
9099 ASM_REWRITE_TAC[];(*19*)
9100 POP_ASSUM MP_TAC 
9101 THEN REMOVE_ASSUM_TAC
9102 THEN REMOVE_ASSUM_TAC
9103 THEN REMOVE_ASSUM_TAC
9104 THEN REMOVE_ASSUM_TAC
9105 THEN REMOVE_ASSUM_TAC
9106 THEN REMOVE_ASSUM_TAC
9107 THEN REMOVE_ASSUM_TAC
9108 THEN REMOVE_ASSUM_TAC
9109 THEN POP_ASSUM MP_TAC 
9110 THEN DISCH_THEN(LABEL_TAC "XONG")
9111 THEN DISCH_TAC
9112 THEN REMOVE_THEN "XONG" MP_TAC
9113 THEN ASM_REWRITE_TAC[]
9114 THEN MP_TAC PI_WORKS
9115 THEN REAL_ARITH_TAC](*19*)](*18*)](*17*)]]]];(*12*)
9116
9117
9118 POP_ASSUM MP_TAC
9119 THEN DISCH_THEN(LABEL_TAC"CUOI")
9120 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
9121 THEN ASSUME_TAC(REAL_ARITH`pi<= pi`)
9122 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
9123 THEN POP_ASSUM MP_TAC
9124 THEN REWRITE_TAC[REAL_ARITH`A=B+A<=>B= &0`]
9125 THEN DISCH_TAC
9126 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
9127 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
9128 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
9129 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
9130 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,w:real^3}\/ ~(w' IN aff_gt {x} {v,w:real^3})`)
9131 THENL(*13*)[
9132
9133 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
9134 THEN POP_ASSUM MP_TAC
9135 THEN POP_ASSUM MP_TAC
9136 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
9137 THEN DISCH_TAC
9138 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
9139  THEN ASSUME_TAC(th))
9140 THEN STRIP_TAC 
9141 THEN POP_ASSUM MP_TAC
9142 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
9143  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
9144 THEN REDUCE_VECTOR_TAC
9145 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
9146 THEN RESA_TAC
9147 THEN POP_ASSUM MP_TAC
9148 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
9149 THEN RESA_TAC
9150 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
9151 THEN RESA_TAC
9152 THEN STRIP_TAC
9153 THEN MP_TAC(SET_RULE`
9154 t2'' + t3'' = &1 - t1'':real
9155 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
9156 `)
9157 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
9158 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
9159 THEN STRIP_TAC
9160 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
9161 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
9162 THEN RESA_TAC
9163 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
9164 THEN RESA_TAC
9165 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
9166 THEN STRIP_TAC
9167 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`]
9168 THEN POP_ASSUM MP_TAC
9169 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9170 THEN DISCH_TAC
9171 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, w}= {(--x) +x, (--x) +v, (--x) +u, (--x) + w}`)
9172 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`]
9173 THEN POP_ASSUM MP_TAC
9174 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9175 THEN DISCH_TAC
9176 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;`w-x:real^3`]
9177 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)`])
9178 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
9179 [VECTOR_ARITH`&1 %A=A`]
9180 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
9181 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`]
9182 THEN POP_ASSUM MP_TAC
9183 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9184 THEN ASM_REWRITE_TAC[]
9185 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
9186 THEN DISCH_TAC
9187 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
9188 THEN MRESA_TAC exists_element_in_half_sapace_fan
9189 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
9190 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
9191 ` (w':real^3)`]
9192 THEN MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`;`w':real^3`;`u':real^3`]
9193 [REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
9194 THEN MRESAL_TAC not_cut_in_edges_fan 
9195 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
9196 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
9197       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
9198       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
9199       aff_ge {x} e =
9200       {}`]
9201 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{w',u':real^3}`)
9202 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`;]
9203 THEN POP_ASSUM MP_TAC
9204 THEN POP_ASSUM MP_TAC
9205 THEN POP_ASSUM MP_TAC
9206 THEN SET_TAC[];(*13*)
9207
9208
9209 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,w:real^3}\/ ~(v' IN aff_gt {x} {v,w:real^3})`)
9210 THENL(*14*)[
9211
9212 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
9213 THEN POP_ASSUM MP_TAC
9214 THEN POP_ASSUM MP_TAC
9215 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
9216 THEN DISCH_TAC
9217 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
9218  THEN ASSUME_TAC(th))
9219 THEN STRIP_TAC 
9220 THEN POP_ASSUM MP_TAC
9221 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
9222  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
9223 THEN REDUCE_VECTOR_TAC
9224 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
9225 THEN RESA_TAC
9226 THEN POP_ASSUM MP_TAC
9227 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
9228 THEN RESA_TAC
9229 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
9230 THEN RESA_TAC
9231 THEN STRIP_TAC
9232 THEN MP_TAC(SET_RULE`
9233 t2'' + t3'' = &1 - t1'':real
9234 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
9235 `)
9236 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
9237 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
9238 THEN STRIP_TAC
9239 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
9240 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
9241 THEN RESA_TAC
9242 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
9243 THEN RESA_TAC
9244 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
9245 THEN STRIP_TAC
9246 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`]
9247 THEN POP_ASSUM MP_TAC
9248 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9249 THEN DISCH_TAC
9250 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +w}`)
9251 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`]
9252 THEN POP_ASSUM MP_TAC
9253 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9254 THEN DISCH_TAC
9255 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;`  w-x:real^3`]
9256 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)`])
9257 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
9258 [VECTOR_ARITH`&1 %A=A`]
9259 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
9260 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`]
9261 THEN POP_ASSUM MP_TAC
9262 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9263 THEN ASM_REWRITE_TAC[]
9264 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
9265 THEN DISCH_TAC
9266 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
9267 THEN MRESA_TAC exists_element_in_half_sapace_fan
9268 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
9269 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
9270 ` (v':real^3)`]
9271 THEN MRESAL_TAC exists_cut_small_edges_fan_le[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`;`v':real^3`;`u':real^3`]
9272 [REAL_ARITH`&0< &1/\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
9273 THEN MRESAL_TAC not_cut_in_edges_fan 
9274 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1 -t:real`]
9275 [REAL_ARITH`(&0< &1- t<=> t< &1)/\ (&1- t< &1<=> &0< t)`;VECTOR_ARITH`(&1 - (&1 - t)) % u + (&1 - t) % w=(&1 - t) % w +t % u`;SET_RULE`aff_gt {x} {v, (&1 - t) % w + t % u} INTER
9276       {v | ?e. e IN E /\ v IN aff_ge {x} e} =
9277       {}<=> !e. e IN E ==> aff_gt {x} {v, (&1 - t) % w + t % u} INTER
9278       aff_ge {x} e =
9279       {}`]
9280 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v',u':real^3}`)
9281 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`;]
9282 THEN POP_ASSUM MP_TAC
9283 THEN POP_ASSUM MP_TAC
9284 THEN POP_ASSUM MP_TAC
9285 THEN SET_TAC[];(*14*)
9286
9287
9288
9289 SUBGOAL_THEN`~(v' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
9290 THENL(*15*)[
9291 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9292 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`w:real^3`;`x':real^3`]
9293 THEN POP_ASSUM MP_TAC
9294 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9295 THEN ASM_REWRITE_TAC[]
9296 THEN POP_ASSUM MP_TAC 
9297 THEN SET_TAC[];(*15*)
9298
9299 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`] decomposition_planar_by_angle_fan)
9300 THEN ASM_REWRITE_TAC[]
9301 THEN STRIP_TAC
9302 THENL(*16*)[
9303 MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
9304 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'}
9305 ==>v IN aff_ge {x} {v', w':real^3}`)
9306 THEN RESA_TAC
9307 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)
9308 THEN ASM_REWRITE_TAC[]
9309 THEN STRIP_TAC
9310 THENL(*17*)[
9311  MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
9312 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
9313 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`w:real^3`;`w':real^3`]
9314 THEN POP_ASSUM MP_TAC
9315 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
9316 THEN DISCH_TAC
9317 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w:real^3`;`w':real^3`]
9318 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`w:real^3`] decomposition_planar_by_angle_fan)
9319 THEN ASM_REWRITE_TAC[]
9320 THEN STRIP_TAC
9321 THENL(*18*)[
9322 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
9323 THEN ASM_TAC THEN SET_TAC[];(*18*)
9324
9325 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
9326 THEN ASM_TAC THEN SET_TAC[]](*18*);(*17*)
9327
9328 REMOVE_THEN "CUOI" MP_TAC
9329 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
9330 THEN REWRITE_TAC[AZIM_REFL]
9331 THEN MP_TAC(PI_WORKS)
9332 THEN REAL_ARITH_TAC](*17*);(*16*)
9333
9334 POP_ASSUM MP_TAC
9335 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9336 THEN DISCH_TAC
9337 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
9338 THEN POP_ASSUM MP_TAC
9339 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9340 THEN ASM_REWRITE_TAC[]
9341 THEN DISCH_TAC
9342 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}`)
9343 THEN RESA_TAC
9344 THEN POP_ASSUM MP_TAC
9345 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
9346 THEN POP_ASSUM MP_TAC
9347 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
9348 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
9349 THEN STRIP_TAC
9350 THEN ASM_REWRITE_TAC[]
9351 THEN STRIP_TAC
9352 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)
9353 THEN ASM_REWRITE_TAC[]
9354 THEN STRIP_TAC
9355 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
9356 THEN DISCH_TAC
9357 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
9358 THEN MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
9359 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
9360 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`w:real^3`;`w':real^3`]
9361 THEN POP_ASSUM MP_TAC
9362 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
9363 THEN DISCH_TAC
9364 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w:real^3`;`w':real^3`]
9365 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`w:real^3`] decomposition_planar_by_angle_fan)
9366 THEN ASM_REWRITE_TAC[]
9367 THEN STRIP_TAC
9368 THENL(*17*)[
9369 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `w:real^3`;`x':real^3`]
9370 THEN ASM_TAC THEN SET_TAC[];(*17*)
9371
9372 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
9373 THEN MP_TAC(SET_RULE`w IN aff_ge {x} { x',w':real^3} /\ aff_ge {x} { x',w'} SUBSET aff_ge {x} {v', w'}
9374 ==>w IN aff_ge {x} {v', w':real^3}`)
9375 THEN RESA_TAC
9376 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `w:real^3`; `u:real^3`; `v':real^3`;`w':real^3`]properties_of_fan7)
9377 THEN ASM_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9378 THEN STRIP_TAC
9379 THENL(*18*)[
9380 POP_ASSUM MP_TAC 
9381 THEN REMOVE_ASSUM_TAC
9382 THEN REMOVE_ASSUM_TAC
9383 THEN REMOVE_ASSUM_TAC
9384 THEN REMOVE_ASSUM_TAC
9385 THEN POP_ASSUM MP_TAC 
9386 THEN DISCH_THEN(LABEL_TAC "XONG")
9387 THEN DISCH_TAC
9388 THEN REMOVE_THEN "XONG" MP_TAC
9389 THEN ASM_REWRITE_TAC[]
9390 THEN MP_TAC PI_WORKS
9391 THEN REAL_ARITH_TAC;(*18*)
9392
9393 ASM_REWRITE_TAC[]](*18*)]]]]]]]]]]]]]]]]]);;
9394
9395
9396
9397
9398
9399
9400
9401
9402
9403 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.
9404 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
9405 /\ sigma_fan x V E u w = v
9406 /\ &0<a /\ a<= &1
9407 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
9408 /\ fan80(x,V,E)
9409 /\  ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
9410 ==> a= &1 /\ independent {v - x, u - x, ((&1 - a) % u + a % w) - x}`,
9411 MESON_TAC[independent_run_edges_fan;cut_in_edges_fan]);;
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
9424
9425
9426
9427
9428
9429
9430
9431
9432 (**********************************************************)
9433 (**********************  RWXUYZZ  *************************)
9434 (**********************************************************)
9435
9436 let exists_in_aff_gt=prove(`!x:real^3  v:real^3 u:real^3.
9437 ~collinear {x,v,u} ==> ?y:real^3. y IN aff_gt {x} {v, u}`,
9438 REPEAT STRIP_TAC
9439 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
9440 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
9441 THEN EXISTS_TAC`&0 % x+ &1 / &2 % v+ &1/ &2 %u:real^3 `
9442 THEN EXISTS_TAC`&0`
9443 THEN EXISTS_TAC`&1/ &2`
9444 THEN EXISTS_TAC`&1/ &2`
9445 THEN ASM_REWRITE_TAC[]
9446 THEN REAL_ARITH_TAC);;
9447
9448
9449 let cut_inside_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 w1:real^3.
9450 ~collinear {x,v,w1} /\ ~collinear {x,u,w} /\  ~collinear {x,v,u}
9451 /\ ~collinear {x,v,w}
9452 /\ &0< azim x u w v /\ azim x u w v < pi 
9453 /\ &0< azim x v u w1 /\ azim x v u w1 < pi 
9454 /\ &0< azim x v w1 w /\ azim x v w1 w < pi 
9455 ==> ~(aff_ge {x,v} {w1} INTER aff_gt {x} {u,w:real^3}={})`,
9456 REWRITE_TAC[SET_RULE`~(A={})<=> ?x. x IN A`;IN_ELIM_THM; INTER] 
9457 THEN REPEAT STRIP_TAC
9458 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w1:real^3`]
9459 THEN MRESA_TAC th3[`x:real^3`;`u:real^3`;`w:real^3`]
9460 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
9461 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
9462 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
9463 THEN POP_ASSUM MP_TAC
9464 THEN DISCH_THEN (LABEL_TAC"CON")
9465 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`]
9466 THEN POP_ASSUM MP_TAC
9467 THEN DISCH_THEN (LABEL_TAC"CON BE")
9468 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`;`w:real^3`;`w1:real^3`]
9469 THEN POP_ASSUM MP_TAC
9470 THEN DISCH_THEN (LABEL_TAC"CON EM")
9471 THEN ABBREV_TAC`a1=(v-x):real^3`
9472 THEN ABBREV_TAC`a2=(w1-x):real^3`
9473 THEN ABBREV_TAC`a3=(w-x) :real^3`
9474 THEN ABBREV_TAC`a4=(u-x):real^3`
9475 THEN ABBREV_TAC`va=a1 cross a2:real^3`
9476 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
9477 THEN EXISTS_TAC`(vb:real^3) cross (va:real^3)+(x:real^3)`
9478 THEN STRIP_TAC
9479 THENL(*2*)[
9480 EXISTS_TAC`&1-(vb:real^3) dot (a2:real^3)+ vb dot (a1:real^3)`
9481 THEN EXISTS_TAC`(vb:real^3) dot (a2:real^3)`
9482 THEN EXISTS_TAC`--((vb:real^3) dot (a1:real^3))`
9483 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - vb dot a2 + vb dot a1) + vb dot a2 + --(vb dot a1) = &1`]
9484 THEN SUBGOAL_THEN `&0<= --((vb:real^3) dot (a1:real^3))` ASSUME_TAC
9485 THENL(*3*)[
9486 EXPAND_TAC"vb"
9487 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
9488 THEN REWRITE_TAC[DOT_LNEG]
9489 THEN REMOVE_THEN "CON"MP_TAC
9490 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9491 THEN ASM_REWRITE_TAC[] 
9492 THEN REAL_ARITH_TAC;
9493 ASM_REWRITE_TAC[]
9494 THEN EXPAND_TAC"va"
9495 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_MUL_LNEG]
9496 THEN EXPAND_TAC"a1"
9497 THEN EXPAND_TAC"a2"
9498 THEN VECTOR_ARITH_TAC];(*2*)
9499 ONCE_REWRITE_TAC[CROSS_SKEW]
9500 THEN EXPAND_TAC"vb"
9501 THEN REWRITE_TAC[CROSS_LAGRANGE;]
9502 THEN EXISTS_TAC`&1+(va:real^3) dot (a4:real^3)- va dot (a3:real^3)`
9503 THEN EXISTS_TAC`((va:real^3) dot (a3:real^3))`
9504 THEN EXISTS_TAC`--(va:real^3) dot (a4:real^3)`
9505 THEN ASM_REWRITE_TAC[DOT_LNEG;VECTOR_MUL_LNEG;REAL_ARITH`(&1 + va dot a4 - va dot a3) + va dot a3 + --(va dot a4) = &1`;]
9506 THEN STRIP_TAC
9507 THENL(*3*)[
9508 EXPAND_TAC"va"
9509 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
9510 THEN REWRITE_TAC[DOT_LNEG;CROSS_TRIPLE]
9511 THEN ASM_REWRITE_TAC[] 
9512 THEN ASM_TAC 
9513 THEN REAL_ARITH_TAC;
9514 EXPAND_TAC"a3"
9515 THEN EXPAND_TAC"a4"
9516 THEN REWRITE_TAC[VECTOR_ARITH`(&1+A-B)%X+B%U+ --(A%V)=X-(A%(V-X)-B%(U-X))`]
9517 THEN VECTOR_ARITH_TAC]]);;
9518
9519
9520
9521
9522 let exists_cut_in_edge_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 w1:real^3.
9523 ~collinear {x,v,w1} /\ ~collinear {x,u,w} /\  ~collinear {x,v,u}
9524 /\ ~collinear {x,v,w}
9525 /\ &0< azim x u w v /\ azim x u w v < pi 
9526 /\ &0< azim x v u w1 /\ azim x v u w1 < pi 
9527 /\ &0< azim x v w1 w /\ azim x v w1 w < pi 
9528 ==> ?a. &0< a /\ a< &1
9529 /\ (&1-a) %u + a % w IN aff_ge {x,v} {w1:real^3}`,
9530
9531 REPEAT STRIP_TAC 
9532 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w1:real^3`]
9533 THEN MRESA_TAC th3[`x:real^3`;`u:real^3`;`w:real^3`]
9534 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
9535 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
9536 THEN MRESA_TAC cut_inside_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
9537 THEN POP_ASSUM MP_TAC
9538 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[SET_RULE`~(A={})<=> ?x. x IN A`;INTER;]
9539 THEN REWRITE_TAC[IN_ELIM_THM]
9540 THEN STRIP_TAC
9541 THEN EXISTS_TAC`inv(&1-t1')*t3'`
9542 THEN MP_TAC(REAL_ARITH`&0< t2' /\ &0< t3' /\ t1'+t2'+t3'= &1==>  &0 < &1- t1' /\ ~(&1- t1' = &0)/\ t2'+t3'= &1- t1'`)
9543 THEN RESA_TAC
9544 THEN POP_ASSUM MP_TAC
9545 THEN MP_TAC(ISPEC`&1- (t1':real)`REAL_LT_INV)
9546 THEN RESA_TAC
9547 THEN MP_TAC(ISPEC`&1- (t1':real)`REAL_MUL_LINV)
9548 THEN RESA_TAC
9549 THEN STRIP_TAC
9550 THEN MP_TAC(SET_RULE`
9551 t2' + t3' = &1 - t1':real
9552 ==> (inv ( &1 - t1'))*(t2' + t3') = (inv ( &1 - t1'))*( &1 - t1':real)
9553 `)
9554 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
9555 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=>  &1 -A*C=A*B`;REAL_ARITH`A< &1 <=> &0< &1-A`]
9556 THEN STRIP_TAC
9557 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1'):real`;`t2':real`;]
9558 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1'):real`;`t3':real`;]
9559 THEN REWRITE_TAC[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`; VECTOR_ARITH`A%(t2' % u + t3' % w)= A%((t1'%x +t2' % u + t3' % w) - t1' %x) :real^3`]
9560 THEN FIND_ASSUM MP_TAC`x' = t1' % x + t2' % u + t3' % w:real^3`
9561 THEN DISCH_TAC
9562 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
9563 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(t1 % x + t2 % v + t3 % w1) - t1' % x=(t1-t1') % x + t2 % v + t3 % w1`;
9564 VECTOR_ARITH`A%(B+C+D)=A%B+A%C+A%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
9565 THEN EXISTS_TAC`(inv (&1 - t1') * (t1 - t1')):real`
9566 THEN EXISTS_TAC`(inv (&1 - t1') * t2):real`
9567 THEN EXISTS_TAC`(inv (&1 - t1') * t3):real`
9568 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - t1') * (t1 - t1') + inv (&1 - t1') * t2 + inv (&1 - t1') * t3
9569 =inv (&1 - t1') * ((t1 +t2 + t3)-t1')`]
9570 THEN MATCH_MP_TAC REAL_LE_MUL
9571 THEN ASM_REWRITE_TAC[]
9572 THEN ASM_TAC THEN REAL_ARITH_TAC);;
9573
9574
9575
9576
9577 let notcoplanar_imp_notcollinear_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
9578 ~coplanar {x,v,u,w}==> ~collinear {x,u,w} /\  ~collinear {x,v,u}
9579 /\ ~collinear {x,v,w}`,
9580 REPEAT GEN_TAC THEN STRIP_TAC
9581 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
9582 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
9583 THEN POP_ASSUM MP_TAC THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
9584 THEN RESA_TAC
9585 THEN MRESAL_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`][SET_RULE`{A,B,C,D}={A,B,D,C}`]);;
9586
9587
9588 let properties_of_fully_surrounded1_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 w1:real^3.
9589 ~coplanar {x,v,u,w}/\ &0< azim x u w v /\ azim x u w v < pi 
9590 ==> &0 < azim x v u w /\ azim x v u w < pi`,
9591 REPEAT STRIP_TAC
9592 THEN MRESA_TAC azim[`(x:real^3)`;` (v:real^3)`;` (u:real^3)`;`(w:real^3)`]
9593 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
9594 THENL[
9595  MP_TAC(REAL_ARITH` &0<= azim x v u (w:real^3) ==> azim x v u w = &0 \/ &0< azim x v u w`)
9596 THEN RESA_TAC
9597 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`];
9598
9599 MP_TAC(REAL_ARITH` (azim x v u w = pi) \/ (pi < azim x v u w) \/  azim x v u w< pi`)
9600 THEN RESA_TAC
9601 THENL[
9602 MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`];
9603
9604 MP_TAC(REAL_ARITH`pi< azim x v u w /\ azim x v u w < &2 * pi ==> &0< azim x v u w - pi /\ azim x v u w - pi< pi`)
9605 THEN RESA_TAC
9606 THEN MRESAL1_TAC SIN_POS_PI`azim x v u (w:real^3) -pi`[SIN_SUB; SIN_PI; COS_PI;REAL_ARITH`&0< A * -- &1 -B * &0 <=> A < &0`]
9607 THEN POP_ASSUM MP_TAC
9608 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`v:real^3`;` u:real^3`;`w:real^3`]
9609 THEN POP_ASSUM MP_TAC
9610 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
9611 THEN DISCH_TAC
9612 THEN MRESA_TAC JBDNJJB[`(v-x):real^3`;`u-x:real^3`;`w-x:real^3`]
9613 THEN POP_ASSUM MP_TAC
9614 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
9615 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
9616 THEN RESA_TAC
9617 THEN STRIP_TAC
9618 THEN MRESAL_TAC REAL_LT_LMUL_EQ[`(((v - x) cross (u - x)) dot (w - x:real^3))`;`&0`;`t:real`][REAL_ARITH`A * &0= &0`]
9619 THEN POP_ASSUM MP_TAC
9620 THEN REWRITE_TAC[DOT_LNEG;CROSS_TRIPLE]
9621 THEN MRESA1_TAC SIN_POS_PI`azim x u  (w:real^3) v`
9622 THEN POP_ASSUM MP_TAC
9623 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`u:real^3`;` w:real^3`;`v:real^3`]
9624 THEN POP_ASSUM MP_TAC
9625 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
9626 THEN DISCH_TAC
9627 THEN MRESA_TAC JBDNJJB[`(u-x):real^3`;`w-x:real^3`;`v-x:real^3`]
9628 THEN POP_ASSUM MP_TAC
9629 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
9630 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
9631 THEN ASM_REWRITE_TAC[]
9632 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9633 THEN RESA_TAC
9634 THEN STRIP_TAC
9635 THEN MRESAL_TAC REAL_LT_LMUL_EQ[`&0`;`(((u - x) cross (w - x)) dot (v - x:real^3))`;`t':real`][REAL_ARITH`A * &0= &0`]
9636 THEN POP_ASSUM MP_TAC
9637 THEN REAL_ARITH_TAC]])
9638 ;;
9639
9640
9641
9642
9643
9644
9645 let in_aff_2_2_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
9646 ~coplanar {x,v,u,w}
9647 ==> 
9648 (!t:real. &0< t /\ t< &1
9649 ==> (!t1:real t2:real t3:real. &0<t3  /\ t1+t2+t3= &1
9650 ==>t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w) IN aff_gt {x,v} {u,w}))`,
9651
9652
9653 REPEAT STRIP_TAC
9654 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
9655 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
9656 THEN MRESA_TAC th3[`x:real^3`;`u:real^3`;`w:real^3`]
9657 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
9658 THEN SUBGOAL_THEN `DISJOINT {x,v:real^3} {u,w:real^3}` ASSUME_TAC
9659 THENL[
9660 REWRITE_TAC[DISJOINT_SYM;SET_RULE`{v:real^3,w:real^3}= {v} UNION {w}`;DISJOINT_UNION]
9661 THEN REWRITE_TAC[SET_RULE`{v} UNION {w}={v:real^3,w:real^3}`]
9662 THEN ONCE_REWRITE_TAC[DISJOINT_SYM]
9663 THEN ASM_REWRITE_TAC[];
9664 MRESAL_TAC AFF_GT_2_2[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
9665 THEN EXISTS_TAC`t1:real`
9666 THEN EXISTS_TAC`t2:real`
9667 THEN EXISTS_TAC`t3*(&1-t):real`
9668 THEN EXISTS_TAC`t3*(t):real`
9669 THEN ASM_REWRITE_TAC[REAL_ARITH`t1 +t2+  t3 * (&1 - t) + t3 * t = t1+t2+t3:real`;VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
9670  t1 % x + t2 % v + (t3 * (&1 - t)) % u  + (t3 * t) % w:real^3`]
9671 THEN STRIP_TAC THEN MATCH_MP_TAC REAL_LT_MUL
9672 THEN ASM_TAC
9673 THEN REAL_ARITH_TAC]);;
9674
9675
9676
9677 let inequality4_aim_in_convex_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 a:real.
9678 ~coplanar {x,v,u,w}/\ &0< azim x u w v /\ azim x u w v < pi 
9679 /\ &0< a /\ a < &1
9680 ==> 
9681 &0< azim x v u ((&1 - a) % u + a % w)
9682 /\ azim x v u ((&1 - a) % u + a % w)< azim x v u w `,
9683
9684 REPEAT STRIP_TAC
9685 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
9686 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
9687 THEN MRESA_TAC th3[`x:real^3`;`u:real^3`;`w:real^3`]
9688 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
9689 THEN MRESA_TAC properties_of_fully_surrounded1_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
9690 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;` v:real^3`;`u:real^3`;`w:real^3`]
9691 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
9692 THEN DISCH_TAC
9693 THEN MRESA_TAC in_aff_2_2_fan[`x:real^3`;` v:real^3`;`u:real^3`;`w:real^3`]
9694 THEN POP_ASSUM(fun th-> MRESA1_TAC th `a:real`)
9695 THEN POP_ASSUM(fun th-> MRESAL_TAC th [`&0:real`;`&0`;`&1`][REAL_ARITH`&0< &1/\ &0+ &0 + &1 = &1`;wedge;IN_ELIM_THM])
9696 THEN POP_ASSUM MP_TAC  THEN POP_ASSUM MP_TAC  THEN REDUCE_VECTOR_TAC
9697 THEN DISCH_TAC THEN DISCH_TAC
9698 THEN ASM_REWRITE_TAC[]);;
9699
9700
9701 let condition_to_in_aff_gt_by_angle=prove(`!x:real^3 v:real^3 u:real^3 s1:real.
9702 ~collinear {x,v,u} /\  &0< (v - x) dot (u - x) /\ &0< s1 
9703 /\ s1< atn ((norm ((v - x) cross (u - x))) * inv((v - x) dot (u - x)))
9704 ==>
9705 sin s1 % e1_fan x v u + cos s1 % e3_fan x v u + x IN aff_gt {x} {v, u}`,
9706 REPEAT STRIP_TAC
9707 THEN ASSUME_TAC(ISPEC`(norm ((v - x) cross (u - x)) * inv ((v - x) dot (u - x))):real`ATN_BOUNDS)
9708 THEN MP_TAC (REAL_ARITH`s1< atn ((norm ((v - x) cross (u - x))) * inv((v - x) dot (u - x)))
9709 /\ atn ((norm ((v - x) cross (u - x))) * inv((v - x) dot (u - x))) < pi/ &2
9710 ==> s1< pi / &2`) THEN RESA_TAC
9711 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
9712 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
9713 THEN REWRITE_TAC[VECTOR_ARITH`sin s1 % e1_fan x v u + cos s1 % e3_fan x v u + x =
9714      t1 % x + t2 % v + t3 % u
9715 <=> sin s1 % e1_fan x v u + cos s1 % e3_fan x v u  =
9716      (t1- &1) % x + t2 % v + t3 % u`;e1_fan;e2_fan;e3_fan;CROSS_LMUL;CROSS_RMUL]
9717 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
9718 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_ARITH`-- (A-B) = B-A:real^3`]
9719 THEN SUBGOAL_THEN`~(norm((v:real^3)-(x:real^3))= &0)` ASSUME_TAC
9720 THENL[
9721 ASM_REWRITE_TAC[NORM_EQ_0;VECTOR_ARITH`v-x=vec 0<=> x=v`];
9722 MP_TAC(ISPEC`norm((v:real^3)-(x:real^3))`REAL_MUL_LINV)
9723 THEN RESA_TAC
9724 THEN REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(((A*B)*D)*D)=A*B*(D pow 2)`;]
9725 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`A%(B-C)=A%B-A%C`]
9726 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;DOT_SQUARE_NORM;REAL_ARITH`(A*B*C pow 2) * D pow 2=A*B*(C*D) pow 2`;REAL_ARITH`A* &1 pow 2=A`;NORM_MUL;REAL_ABS_INV;REAL_ABS_NORM;REAL_INV_MUL;REAL_INV_INV
9727 ; ]
9728 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C) * D pow 2= A*C * D*(D*B)`;REAL_ARITH`A*B* &1= A*B`;VECTOR_ARITH`A-B+C%D-C%E=A-B+C%(D-E)`;VECTOR_ARITH`A-C%D+B%D=A+(B-C)%D`;
9729 REAL_ARITH`A*B-(C*D*B)*E=B*(A-C*D*E)`]
9730 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
9731 THEN SUBGOAL_THEN`~(norm((v - x) cross (u - x:real^3))= &0)` ASSUME_TAC
9732 THENL[
9733 ASM_REWRITE_TAC[NORM_EQ_0]
9734 THEN MP_TAC(ISPECL[`v-x:real^3`;`u-x:real^3`]CROSS_EQ_0)
9735 THEN ONCE_REWRITE_TAC[GSYM COLLINEAR_3;]
9736 THEN RESA_TAC
9737 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
9738 THEN ASM_REWRITE_TAC[];
9739 MP_TAC(ISPEC`norm((v - x) cross (u - x:real^3))`REAL_MUL_LINV)
9740 THEN RESA_TAC
9741 THEN ASSUME_TAC(ISPEC`(v - x) cross (u - x:real^3)`NORM_POS_LE)
9742 THEN MP_TAC(REAL_ARITH`~(norm ((v - x) cross (u - x:real^3)) = &0)/\ &0 <= norm ((v - x) cross (u - x:real^3))==> &0< norm ((v - x) cross (u - x:real^3)) `)
9743 THEN RESA_TAC
9744 THEN MRESA1_TAC REAL_LT_INV`norm((v - x) cross (u - x:real^3))`
9745
9746 THEN ASSUME_TAC(ISPEC`(v - x:real^3)`NORM_POS_LE)
9747 THEN MP_TAC(REAL_ARITH`~(norm ((v - x:real^3)) = &0)/\ &0 <= norm ((v - x:real^3))==> &0< norm ((v - x:real^3)) `)
9748 THEN RESA_TAC
9749 THEN MRESA1_TAC REAL_LT_INV`norm((v - x:real^3))`
9750 THEN MRESA1_TAC COS_POS_PI2`s1:real`
9751 THEN MRESA1_TAC SIN_POS_PI2`s1:real`
9752 THEN EXISTS_TAC`&1-(sin s1 * norm (v - x) * inv (norm ((v - x) cross (u - x))))
9753 -(inv (norm (v - x)) *
9754       (cos s1 -
9755        sin s1 * inv (norm ((v - x) cross (u - x))) * ((v - x) dot (u - x:real^3))))`
9756 THEN EXISTS_TAC `(inv (norm (v - x)) *
9757       (cos s1 -
9758        sin s1 * inv (norm ((v - x) cross (u - x))) * ((v - x) dot (u - x:real^3))))`
9759 THEN EXISTS_TAC`(sin s1 * norm (v - x) * inv (norm ((v - x) cross (u - x:real^3))))`
9760 THEN STRIP_TAC
9761 THENL[
9762 MATCH_MP_TAC REAL_LT_MUL
9763 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<A-B<=> B<A`]
9764 THEN ASSUME_TAC(PI_WORKS)
9765 THEN MP_TAC(REAL_ARITH`&0< pi /\ &0< s1 ==> --(pi / &2) < s1`)
9766 THEN RESA_TAC
9767 THEN MRESAL_TAC  TAN_MONO_LT[`s1:real`;`atn (norm ((v - x) cross (u - x)) * inv ((v - x) dot (u - x))):real`][ATN_TAN]
9768 THEN MRESAL_TAC REAL_LT_LMUL[`inv (norm ((v - x) cross (u - x:real^3)))`;`tan s1:real`;`norm ((v - x) cross (u - x)) * inv ((v - x) dot (u - x:real^3))`][REAL_ARITH`A*B*C=(A*B)*C`;REAL_ARITH`&1*A=A`]
9769 THEN MP_TAC(REAL_ARITH`&0<(v - x) dot (u - x:real^3)==> ~((v - x) dot (u - x:real^3)= &0)`)
9770 THEN RESA_TAC
9771 THEN MP_TAC(ISPEC`(v - x) dot (u - x:real^3)`REAL_MUL_LINV)
9772 THEN RESA_TAC
9773 THEN MP_TAC(REAL_ARITH`&0<cos s1 ==> ~(cos s1= &0)`)
9774 THEN RESA_TAC
9775 THEN MP_TAC(ISPEC`cos s1`REAL_MUL_LINV)
9776 THEN RESA_TAC
9777 THEN MRESAL_TAC REAL_LT_RMUL[`inv (norm ((v - x) cross (u - x:real^3)))* tan s1:real`;`inv ((v - x) dot (u - x:real^3))`;`(v - x) dot (u - x:real^3)`][REAL_ARITH`(A*B)*C=A*C*B`;tan]
9778
9779 THEN MRESAL_TAC REAL_LT_RMUL[`inv (norm ((v - x) cross (u - x:real^3)))* ((v - x) dot (u - x:real^3))* sin s1 / cos s1`;`&1`;`cos s1`][REAL_ARITH`&1* A=A`;real_div;REAL_ARITH`(A*B*C*D)*E=(C*A*B)*(D*E)`;REAL_ARITH`A* &1=A`]
9780 THEN ASM_TAC THEN REAL_ARITH_TAC;
9781 STRIP_TAC
9782 THENL[
9783 MATCH_MP_TAC REAL_LT_MUL
9784 THEN ASM_REWRITE_TAC[]
9785 THEN MATCH_MP_TAC REAL_LT_MUL
9786 THEN ASM_REWRITE_TAC[];
9787
9788 STRIP_TAC
9789 THENL[
9790 REAL_ARITH_TAC;
9791 VECTOR_ARITH_TAC]]]]]);;
9792
9793
9794
9795
9796
9797
9798
9799
9800 let condition1_to_in_aff_gt_by_angle=prove(`!x:real^3 v:real^3 u:real^3 s1:real.
9801 ~collinear {x,v,u} /\ &0< s1 /\ s1< pi/ &2
9802 /\ (v - x) dot (u - x:real^3) <= &0
9803 ==>
9804 sin s1 % e1_fan x v u + cos s1 % e3_fan x v u + x IN aff_gt {x} {v, u}`,
9805
9806 REPEAT STRIP_TAC
9807 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
9808 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
9809 THEN REWRITE_TAC[VECTOR_ARITH`sin s1 % e1_fan x v u + cos s1 % e3_fan x v u + x =
9810      t1 % x + t2 % v + t3 % u
9811 <=> sin s1 % e1_fan x v u + cos s1 % e3_fan x v u  =
9812      (t1- &1) % x + t2 % v + t3 % u`;e1_fan;e2_fan;e3_fan;CROSS_LMUL;CROSS_RMUL]
9813 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
9814 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_ARITH`-- (A-B) = B-A:real^3`]
9815 THEN SUBGOAL_THEN`~(norm((v:real^3)-(x:real^3))= &0)` ASSUME_TAC
9816 THENL[
9817 ASM_REWRITE_TAC[NORM_EQ_0;VECTOR_ARITH`v-x=vec 0<=> x=v`];
9818 MP_TAC(ISPEC`norm((v:real^3)-(x:real^3))`REAL_MUL_LINV)
9819 THEN RESA_TAC
9820 THEN REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(((A*B)*D)*D)=A*B*(D pow 2)`;]
9821 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`A%(B-C)=A%B-A%C`]
9822 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;DOT_SQUARE_NORM;REAL_ARITH`(A*B*C pow 2) * D pow 2=A*B*(C*D) pow 2`;REAL_ARITH`A* &1 pow 2=A`;NORM_MUL;REAL_ABS_INV;REAL_ABS_NORM;REAL_INV_MUL;REAL_INV_INV
9823 ; ]
9824 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C) * D pow 2= A*C * D*(D*B)`;REAL_ARITH`A*B* &1= A*B`;VECTOR_ARITH`A-B+C%D-C%E=A-B+C%(D-E)`;VECTOR_ARITH`A-C%D+B%D=A+(B-C)%D`;
9825 REAL_ARITH`A*B-(C*D*B)*E=B*(A-C*D*E)`]
9826 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
9827 THEN SUBGOAL_THEN`~(norm((v - x) cross (u - x:real^3))= &0)` ASSUME_TAC
9828 THENL[
9829 ASM_REWRITE_TAC[NORM_EQ_0]
9830 THEN MP_TAC(ISPECL[`v-x:real^3`;`u-x:real^3`]CROSS_EQ_0)
9831 THEN ONCE_REWRITE_TAC[GSYM COLLINEAR_3;]
9832 THEN RESA_TAC
9833 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
9834 THEN ASM_REWRITE_TAC[];
9835 MP_TAC(ISPEC`norm((v - x) cross (u - x:real^3))`REAL_MUL_LINV)
9836 THEN RESA_TAC
9837 THEN ASSUME_TAC(ISPEC`(v - x) cross (u - x:real^3)`NORM_POS_LE)
9838 THEN MP_TAC(REAL_ARITH`~(norm ((v - x) cross (u - x:real^3)) = &0)/\ &0 <= norm ((v - x) cross (u - x:real^3))==> &0< norm ((v - x) cross (u - x:real^3)) `)
9839 THEN RESA_TAC
9840 THEN MRESA1_TAC REAL_LT_INV`norm((v - x) cross (u - x:real^3))`
9841
9842 THEN ASSUME_TAC(ISPEC`(v - x:real^3)`NORM_POS_LE)
9843 THEN MP_TAC(REAL_ARITH`~(norm ((v - x:real^3)) = &0)/\ &0 <= norm ((v - x:real^3))==> &0< norm ((v - x:real^3)) `)
9844 THEN RESA_TAC
9845 THEN MRESA1_TAC REAL_LT_INV`norm((v - x:real^3))`
9846 THEN MRESA1_TAC COS_POS_PI2`s1:real`
9847 THEN MRESA1_TAC SIN_POS_PI2`s1:real`
9848 THEN EXISTS_TAC`&1-(sin s1 * norm (v - x) * inv (norm ((v - x) cross (u - x))))
9849 -(inv (norm (v - x)) *
9850       (cos s1 -
9851        sin s1 * inv (norm ((v - x) cross (u - x))) * ((v - x) dot (u - x:real^3))))`
9852 THEN EXISTS_TAC `(inv (norm (v - x)) *
9853       (cos s1 -
9854        sin s1 * inv (norm ((v - x) cross (u - x))) * ((v - x) dot (u - x:real^3))))`
9855 THEN EXISTS_TAC`(sin s1 * norm (v - x) * inv (norm ((v - x) cross (u - x:real^3))))`
9856 THEN STRIP_TAC
9857 THENL[
9858 MATCH_MP_TAC REAL_LT_MUL
9859 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<A-B<=> B<A`]
9860 THEN MATCH_MP_TAC(REAL_ARITH`&0< cos s1 /\ sin s1 * inv (norm ((v - x) cross (u - x))) * ((v - x) dot (u - x)) <= &0==> sin s1 * inv (norm ((v - x) cross (u - x))) * ((v - x) dot (u - x)) < cos s1`)
9861 THEN ASM_REWRITE_TAC[REAL_ARITH`A *B *C<= &0<=> &0<= A*B*(-- C)`]
9862 THEN MATCH_MP_TAC REAL_LE_MUL
9863 THEN MP_TAC(REAL_ARITH`&0< sin s1==> &0<= sin s1`) THEN RESA_TAC
9864 THEN ASM_REWRITE_TAC[]
9865 THEN MATCH_MP_TAC REAL_LE_MUL
9866 THEN MP_TAC(REAL_ARITH`&0< inv (norm ((v - x) cross (u - x)))==> &0<= inv (norm ((v - x) cross (u - x)))`) THEN RESA_TAC
9867 THEN ASM_REWRITE_TAC[]
9868 THEN ASM_TAC THEN REAL_ARITH_TAC;
9869 STRIP_TAC
9870 THENL[
9871 MATCH_MP_TAC REAL_LT_MUL
9872 THEN ASM_REWRITE_TAC[]
9873 THEN MATCH_MP_TAC REAL_LT_MUL
9874 THEN ASM_REWRITE_TAC[];
9875 STRIP_TAC
9876 THENL[
9877 REAL_ARITH_TAC;
9878 VECTOR_ARITH_TAC]]]]]);;
9879
9880
9881
9882
9883 let angle_is_small_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
9884 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
9885 /\ sigma_fan x V E u w = v
9886 /\ fan80(x,V,E)
9887 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
9888 ==>
9889  azim x v u w <= azim x v u (sigma_fan x V E v u) `,
9890
9891
9892 REPEAT STRIP_TAC
9893 THEN POP_ASSUM MP_TAC
9894 THEN POP_ASSUM MP_TAC
9895 THEN DISCH_THEN(LABEL_TAC "BE")
9896 THEN DISCH_THEN(LABEL_TAC"EM")
9897 THEN USE_THEN "BE" MP_TAC
9898 THEN REWRITE_TAC[fan80]
9899 THEN DISCH_TAC
9900 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
9901 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
9902 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
9903 ` (v:real^3)`]
9904 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
9905 ` (u:real^3)`]
9906 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `v:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
9907 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge v V E = {u} \/ ~(set_of_edge v V E = {u:real^3})`)
9908 THENL(*1*)[
9909 MRESA_TAC CARD_SING[`u:real^3`; `(set_of_edge v V E):real^3->bool`]
9910 THEN POP_ASSUM MP_TAC
9911 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
9912 THEN ASM_TAC THEN ARITH_TAC;(*1*)
9913 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`]
9914 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)`]
9915 THEN POP_ASSUM MP_TAC THEN RESA_TAC  
9916 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`]
9917 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
9918 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
9919 THEN  ABBREV_TAC`w1=(sigma_fan x V E v u) :real^3`
9920 THEN MRESA_TAC properties_of_fully_surrounded1_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
9921 THEN DISJ_CASES_TAC(REAL_ARITH`  azim x v u w1 < azim x v u w\/ azim x v u w <= azim x v u w1 `)
9922 THENL(*2*)[
9923 MP_TAC(REAL_ARITH`azim x v u w1 < azim x v u w ==> azim x v u w1 <= azim x v u w`)
9924 THEN RESA_TAC
9925 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`w:real^3`]
9926 THEN MP_TAC(REAL_ARITH` &0< azim x v u w1 /\ azim x v u w1 < azim x v u w /\ azim x v u w = azim x v u w1 + azim x v w1 w
9927 ==> &0< azim x v w1 w /\ azim x v w1 w <= azim x v u w`)
9928 THEN RESA_TAC
9929 THEN MP_TAC(REAL_ARITH`azim x v w1 w <= azim x v u w /\ azim x v u w < pi
9930 ==> azim x v w1 w < pi`)
9931 THEN RESA_TAC
9932 THEN MRESA_TAC exists_cut_in_edge_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
9933 THEN POP_ASSUM MP_TAC
9934 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[SET_RULE`~(A={})<=> ?x. x IN A`;INTER]
9935 THEN REWRITE_TAC[IN_ELIM_THM] 
9936 THEN STRIP_TAC
9937 THEN ABBREV_TAC`va=(&1-a)%u + a%w:real^3`
9938 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`]
9939 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w1:real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
9940 THEN ASM_REWRITE_TAC[]
9941 THEN STRIP_TAC
9942 THENL(*3*)[
9943 MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v:real^3)`;`(w1:real^3)`]
9944 THEN MRESA_TAC not_cut_in_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`]
9945 THEN MP_TAC(SET_RULE`w1 IN aff_gt {x} {v, va}
9946  /\ w1 IN aff_ge {x} {v, w1}==> ~(aff_gt {x} {v, va} INTER aff_ge {x:real^3} {v, w1}={})`)
9947 THEN RESA_TAC
9948 THEN POP_ASSUM MP_TAC
9949 THEN POP_ASSUM MP_TAC
9950 THEN FIND_ASSUM MP_TAC`{v,w1:real^3} IN E`
9951 THEN SET_TAC[];(*3*)
9952 MRESA_TAC pos_in_aff_ge_fan [`x:real^3`;`u:real^3`;`w:real^3`;`a:real`]
9953 THEN MP_TAC(SET_RULE`va IN aff_ge {x} {v, w1:real^3} /\ va IN aff_ge {x} {u, w} 
9954 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v, w1:real^3} `)
9955 THEN RESA_TAC
9956 THEN POP_ASSUM MP_TAC
9957 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
9958 THEN REWRITE_TAC[FAN;fan7]
9959 THEN STRIP_TAC
9960 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v:real^3),(w1:real^3)}`]th)) 
9961   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
9962 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
9963 THEN MP_TAC(SET_RULE`~(v=u) /\ DISJOINT{x,v} {w} ==> ~(v IN {u,w:real^3}) `)
9964 THEN RESA_TAC
9965 THEN MP_TAC(SET_RULE`~(v IN {u,w:real^3})/\ ~(u=w)==> ~({u, w} INTER {v, w1} = {u, w:real^3})`)
9966 THEN RESA_TAC
9967 THEN MP_TAC(SET_RULE`~({u, w} INTER {v, w1} = {u, w:real^3}) ==> {u, w} INTER {v, w1} PSUBSET {u, w} `)
9968 THEN RESA_TAC
9969 THEN MP_TAC(SET_RULE`{u, w} INTER {v, w1} PSUBSET {u, w:real^3} ==> {u, w} INTER {v, w1} SUBSET {u}\/  {u, w} INTER {v, w1} SUBSET {w} `)
9970 THEN ASM_REWRITE_TAC[]
9971 THEN STRIP_TAC
9972 THENL(*4*)[
9973 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v, w1:real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
9974 THEN STRIP_TAC
9975 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
9976 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v, w1}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v, w1})==> va IN aff {x,u}`)
9977 THEN RESA_TAC
9978 THEN POP_ASSUM MP_TAC
9979 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
9980 THEN STRIP_TAC
9981 THEN POP_ASSUM MP_TAC
9982 THEN EXPAND_TAC"va"
9983 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
9984 <=> a % w = u' % x + (v''+a- &1) % u`]
9985 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a = &0)`) THEN RESA_TAC
9986 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
9987 THEN STRIP_TAC
9988 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)`)
9989 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
9990 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
9991 THEN REDUCE_VECTOR_TAC
9992 THEN STRIP_TAC
9993 THEN SUBGOAL_THEN `w IN aff {x,u:real^3}` ASSUME_TAC
9994 THENL(*5*)[
9995 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
9996 THEN EXISTS_TAC`(inv a * u'):real`
9997 THEN EXISTS_TAC`(inv a * (v' + a - &1)):real`
9998 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`];(*5*)
9999 POP_ASSUM MP_TAC
10000 THEN FIND_ASSUM MP_TAC `~(w IN aff {x, u:real^3})`
10001 THEN SET_TAC[]](*5*);(*4*)
10002
10003 FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
10004 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10005 THEN STRIP_TAC
10006 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
10007 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10008 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v, w1:real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
10009 THEN STRIP_TAC
10010 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {w}={x,w}`;GSYM aff]
10011 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v, w1}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v, w1})==> va IN aff {x,w}`)
10012 THEN RESA_TAC
10013 THEN POP_ASSUM MP_TAC
10014 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
10015 THEN STRIP_TAC
10016 THEN POP_ASSUM MP_TAC
10017 THEN EXPAND_TAC"va"
10018 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
10019 <=> (&1-a) % u = u' % x + (v''-a) % w`]
10020 THEN MP_TAC(REAL_ARITH`a < &1==> ~(&1- a= &0)`) THEN RESA_TAC
10021 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
10022 THEN STRIP_TAC
10023 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)`)
10024 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
10025 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
10026 THEN REDUCE_VECTOR_TAC
10027 THEN STRIP_TAC
10028 THEN SUBGOAL_THEN `u IN aff {x,w:real^3}` ASSUME_TAC
10029 THENL(*5*)[
10030 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
10031 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
10032 THEN EXISTS_TAC`(inv (&1-a) * (v' - a)):real`
10033 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1-a') * u' + inv (&1-a') * (v' - a') =inv (&1-a') * ( (u' + v') - a')`;];(*5*)
10034
10035 POP_ASSUM MP_TAC
10036 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
10037 THEN SET_TAC[]](*5*)](*4*)](*3*);(*2*)
10038
10039 ASM_REWRITE_TAC[]]]);;
10040
10041
10042
10043 let angle_is_smallpi_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
10044 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
10045 /\ sigma_fan x V E u w = v
10046 /\ fan80(x,V,E)
10047 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
10048 ==>
10049 &0< azim x v u w /\ azim x v u w <pi`,
10050 REPEAT STRIP_TAC
10051 THENL[ 
10052 POP_ASSUM MP_TAC
10053 THEN POP_ASSUM MP_TAC
10054 THEN DISCH_THEN(LABEL_TAC "BE")
10055 THEN DISCH_THEN(LABEL_TAC"EM")
10056 THEN USE_THEN "BE" MP_TAC
10057 THEN REWRITE_TAC[fan80]
10058 THEN DISCH_TAC
10059 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
10060 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
10061 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`]
10062 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
10063 THEN SUBGOAL_THEN`~(azim x v u (w:real^3)= &0)`ASSUME_TAC
10064 THENL[STRIP_TAC
10065 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`];
10066 MATCH_MP_TAC(REAL_ARITH`~(azim x v u (w:real^3)= &0)/\ &0<= azim x v u w ==> &0 < azim x v u w`)
10067 THEN ASM_REWRITE_TAC[azim]];
10068
10069 POP_ASSUM MP_TAC
10070 THEN POP_ASSUM MP_TAC
10071 THEN DISCH_THEN(LABEL_TAC "BE")
10072 THEN DISCH_THEN(LABEL_TAC"EM")
10073 THEN USE_THEN "BE" MP_TAC
10074 THEN REWRITE_TAC[fan80]
10075 THEN DISCH_TAC
10076 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
10077 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
10078 THEN MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`]
10079 THEN ASM_TAC THEN REAL_ARITH_TAC]);;
10080
10081
10082
10083
10084 let exists_rw_dart_inter_aff_gt_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 .
10085 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
10086 /\ sigma_fan x V E u w = v
10087 /\ fan80(x,V,E)
10088 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
10089 ==>
10090 (?h:real. &0< h /\
10091 (!t:real. &0< t /\ t< h==> 
10092 (!s:real. &0<s /\ s< pi/ &2
10093 ==>
10094 ~(rw_dart_fan x V E ((x:real^3),(v:real^3),(u:real^3),(sigma_fan x V E v (u:real^3))) (cos(s)) INTER aff_gt {x} {v, (&1-t)%u+t%w}={})
10095 )))`,
10096
10097
10098 REPEAT STRIP_TAC
10099 THEN POP_ASSUM MP_TAC
10100 THEN POP_ASSUM MP_TAC
10101 THEN DISCH_THEN(LABEL_TAC "BE")
10102 THEN DISCH_THEN(LABEL_TAC"EM")
10103 THEN USE_THEN "BE" MP_TAC
10104 THEN REWRITE_TAC[fan80]
10105 THEN DISCH_TAC
10106 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
10107 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
10108 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
10109 ` (v:real^3)`]
10110 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
10111 ` (u:real^3)`]
10112 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `v:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
10113 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge v V E = {u} \/ ~(set_of_edge v V E = {u:real^3})`)
10114 THENL(*1*)[
10115 MRESA_TAC CARD_SING[`u:real^3`; `(set_of_edge v V E):real^3->bool`]
10116 THEN POP_ASSUM MP_TAC
10117 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
10118 THEN ASM_TAC THEN ARITH_TAC;(*1*)
10119
10120 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`]
10121 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)`]
10122 THEN POP_ASSUM MP_TAC THEN RESA_TAC  
10123 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`]
10124 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
10125 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
10126 THEN  ABBREV_TAC`w1=(sigma_fan x V E v u) :real^3`
10127 THEN MRESA_TAC properties_of_fully_surrounded1_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
10128 THEN DISJ_CASES_TAC(REAL_ARITH`  azim x v u w1 < azim x v u w\/ azim x v u w <= azim x v u w1 `)
10129 THENL(*2*)[
10130 MP_TAC(REAL_ARITH`azim x v u w1 < azim x v u w ==> azim x v u w1 <= azim x v u w`)
10131 THEN RESA_TAC
10132 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`w:real^3`]
10133 THEN MP_TAC(REAL_ARITH` &0< azim x v u w1 /\ azim x v u w1 < azim x v u w /\ azim x v u w = azim x v u w1 + azim x v w1 w
10134 ==> &0< azim x v w1 w /\ azim x v w1 w <= azim x v u w`)
10135 THEN RESA_TAC
10136 THEN MP_TAC(REAL_ARITH`azim x v w1 w <= azim x v u w /\ azim x v u w < pi
10137 ==> azim x v w1 w < pi`)
10138 THEN RESA_TAC
10139 THEN MRESA_TAC exists_cut_in_edge_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
10140 THEN POP_ASSUM MP_TAC
10141 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[SET_RULE`~(A={})<=> ?x. x IN A`;INTER]
10142 THEN REWRITE_TAC[IN_ELIM_THM] 
10143 THEN STRIP_TAC
10144 THEN ABBREV_TAC`va=(&1-a)%u + a%w:real^3`
10145 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`]
10146 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w1:real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
10147 THEN ASM_REWRITE_TAC[]
10148 THEN STRIP_TAC
10149 THENL(*3*)[
10150 MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v:real^3)`;`(w1:real^3)`]
10151 THEN MRESA_TAC not_cut_in_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`]
10152 THEN MP_TAC(SET_RULE`w1 IN aff_gt {x} {v, va}
10153  /\ w1 IN aff_ge {x} {v, w1}==> ~(aff_gt {x} {v, va} INTER aff_ge {x:real^3} {v, w1}={})`)
10154 THEN RESA_TAC
10155 THEN POP_ASSUM MP_TAC
10156 THEN POP_ASSUM MP_TAC
10157 THEN FIND_ASSUM MP_TAC`{v,w1:real^3} IN E`
10158 THEN SET_TAC[];(*3*)
10159
10160 MRESA_TAC pos_in_aff_ge_fan [`x:real^3`;`u:real^3`;`w:real^3`;`a:real`]
10161 THEN MP_TAC(SET_RULE`va IN aff_ge {x} {v, w1:real^3} /\ va IN aff_ge {x} {u, w} 
10162 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v, w1:real^3} `)
10163 THEN RESA_TAC
10164 THEN POP_ASSUM MP_TAC
10165 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
10166 THEN REWRITE_TAC[FAN;fan7]
10167 THEN STRIP_TAC
10168 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v:real^3),(w1:real^3)}`]th)) 
10169   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
10170 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
10171 THEN MP_TAC(SET_RULE`~(v=u) /\ DISJOINT{x,v} {w} ==> ~(v IN {u,w:real^3}) `)
10172 THEN RESA_TAC
10173 THEN MP_TAC(SET_RULE`~(v IN {u,w:real^3})/\ ~(u=w)==> ~({u, w} INTER {v, w1} = {u, w:real^3})`)
10174 THEN RESA_TAC
10175 THEN MP_TAC(SET_RULE`~({u, w} INTER {v, w1} = {u, w:real^3}) ==> {u, w} INTER {v, w1} PSUBSET {u, w} `)
10176 THEN RESA_TAC
10177 THEN MP_TAC(SET_RULE`{u, w} INTER {v, w1} PSUBSET {u, w:real^3} ==> {u, w} INTER {v, w1} SUBSET {u}\/  {u, w} INTER {v, w1} SUBSET {w} `)
10178 THEN ASM_REWRITE_TAC[]
10179 THEN STRIP_TAC
10180 THENL(*4*)[
10181 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v, w1:real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
10182 THEN STRIP_TAC
10183 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
10184 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v, w1}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v, w1})==> va IN aff {x,u}`)
10185 THEN RESA_TAC
10186 THEN POP_ASSUM MP_TAC
10187 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
10188 THEN STRIP_TAC
10189 THEN POP_ASSUM MP_TAC
10190 THEN EXPAND_TAC"va"
10191 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
10192 <=> a % w = u' % x + (v''+a- &1) % u`]
10193 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a = &0)`) THEN RESA_TAC
10194 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
10195 THEN STRIP_TAC
10196 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)`)
10197 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
10198 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
10199 THEN REDUCE_VECTOR_TAC
10200 THEN STRIP_TAC
10201 THEN SUBGOAL_THEN `w IN aff {x,u:real^3}` ASSUME_TAC
10202 THENL(*5*)[
10203 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
10204 THEN EXISTS_TAC`(inv a * u'):real`
10205 THEN EXISTS_TAC`(inv a * (v' + a - &1)):real`
10206 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`];(*5*)
10207 POP_ASSUM MP_TAC
10208 THEN FIND_ASSUM MP_TAC `~(w IN aff {x, u:real^3})`
10209 THEN SET_TAC[]](*5*);(*4*)
10210
10211 FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
10212 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10213 THEN STRIP_TAC
10214 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
10215 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10216 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v, w1:real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
10217 THEN STRIP_TAC
10218 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {w}={x,w}`;GSYM aff]
10219 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v, w1}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v, w1})==> va IN aff {x,w}`)
10220 THEN RESA_TAC
10221 THEN POP_ASSUM MP_TAC
10222 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
10223 THEN STRIP_TAC
10224 THEN POP_ASSUM MP_TAC
10225 THEN EXPAND_TAC"va"
10226 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
10227 <=> (&1-a) % u = u' % x + (v''-a) % w`]
10228 THEN MP_TAC(REAL_ARITH`a < &1==> ~(&1- a= &0)`) THEN RESA_TAC
10229 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
10230 THEN STRIP_TAC
10231 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)`)
10232 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
10233 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
10234 THEN REDUCE_VECTOR_TAC
10235 THEN STRIP_TAC
10236 THEN SUBGOAL_THEN `u IN aff {x,w:real^3}` ASSUME_TAC
10237 THENL(*5*)[REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
10238 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
10239 THEN EXISTS_TAC`(inv (&1-a) * (v' - a)):real`
10240 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1-a') * u' + inv (&1-a') * (v' - a') =inv (&1-a') * ( (u' + v') - a')`;];(*5*)
10241
10242 POP_ASSUM MP_TAC
10243 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
10244 THEN SET_TAC[]](*5*)](*4*)](*3*);(*2*)
10245
10246 EXISTS_TAC`&1`
10247 THEN REWRITE_TAC[REAL_ARITH`&0< &1`]
10248 THEN REPEAT STRIP_TAC
10249 THEN POP_ASSUM MP_TAC
10250 THEN ABBREV_TAC`va=(&1-t)%u + t%w:real^3`
10251 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`;`t:real`]
10252 THEN MRESA_TAC inequality4_aim_in_convex_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`t:real`]
10253 THEN ASM_REWRITE_TAC[rw_dart_fan;w_dart_fan]
10254 THEN SUBGOAL_THEN`aff_gt {x} {v,va:real^3} SUBSET wedge x v u w1` ASSUME_TAC
10255 THENL(*3*)[
10256 REWRITE_TAC[SUBSET; IN_ELIM_THM; wedge]
10257 THEN GEN_TAC
10258 THEN MRESAL_TAC aff_gt_inter_aff_gt [`(x:real^3)`;`(v:real^3)`;`(va:real^3)`][INTER;IN_ELIM_THM]
10259 THEN STRIP_TAC
10260 THEN MRESAL_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`va:real^3`;`x':real^3`][IN_ELIM_THM]
10261 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10262 THEN ASM_REWRITE_TAC[]
10263 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`; `x':real^3`;`va:real^3`]
10264 THEN POP_ASSUM MP_TAC
10265 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10266 THEN RESA_TAC
10267 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
10268 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
10269 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
10270 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
10271 THEN REAL_ARITH_TAC;(*3*)
10272
10273 MP_TAC(SET_RULE`aff_gt {x} {v, va:real^3} SUBSET wedge x v u w1 ==> (wedge x v u w1 INTER rcone_fan x v (cos s)) INTER aff_gt {x} {v, va}=(rcone_fan x v (cos s)) INTER aff_gt {x} {v, va}`)
10274 THEN RESA_TAC
10275 THEN REWRITE_TAC[rcone_fan;INTER;IN_ELIM_THM]
10276 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;IN_ELIM_THM]
10277 THEN DISJ_CASES_TAC(REAL_ARITH`(v - x) dot (va - x:real^3) <= &0 \/ &0< (v - x) dot (va - x)`)
10278 THENL(*4*)[
10279 ABBREV_TAC`s1= s/ &2:real`
10280 THEN MP_TAC(REAL_ARITH`&0< s /\ s< pi/ &2/\ s1= s/ &2 /\ &0< pi ==> &0<= s1 /\ s1< s /\  s <= pi/\ &0<s1 /\ s1<pi/ &2`)
10281 THEN REWRITE_TAC[PI_WORKS]
10282 THEN RESA_TAC
10283 THEN EXISTS_TAC`sin (s1) % (e1_fan x v va) + (cos s1) %(e3_fan x v va)+x :real^3 `
10284 THEN REWRITE_TAC[dist;vector_norm;VECTOR_ARITH`(B+C+A)-A=(B+C:real^3)`; DOT_LADD;DOT_RADD;DOT_RMUL;DOT_LMUL;]
10285 THEN MRESAL_TAC properties_coordinate[`x:real^3`;`v:real^3`;`va:real^3`][orthonormal]
10286 THEN ONCE_REWRITE_TAC[DOT_SYM]
10287 THEN ASSUME_TAC(ISPEC`s1:real`SIN_CIRCLE)
10288 THEN ASM_REWRITE_TAC[]
10289 THEN REDUCE_ARITH_TAC
10290 THEN ASM_REWRITE_TAC[REAL_ARITH`sin s * sin s + cos s * cos s =(sin s) pow 2 + (cos s) pow 2`;e3_fan;DOT_RMUL; ]
10291 THEN ONCE_REWRITE_TAC[GSYM vector_norm;]
10292 THEN REWRITE_TAC[DOT_SQUARE_NORM;]
10293 THEN MRESAL1_TAC  SQRT_POW_2`&1`[REAL_ARITH`a pow 2 = a * a`;REAL_ARITH`&0<= &1`;]
10294 THEN POP_ASSUM MP_TAC
10295 THEN MRESAL_TAC SQRT_MUL[`&1`;`&1`][REAL_ARITH`&0<= &1`;]
10296 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th); REAL_ARITH`&1* &1= &1`])
10297 THEN RESA_TAC
10298 THEN REDUCE_ARITH_TAC
10299 THEN SUBGOAL_THEN`~(norm((v:real^3)-(x:real^3))= &0)` ASSUME_TAC
10300 THENL(*5*)[ ASM_REWRITE_TAC[NORM_EQ_0;VECTOR_ARITH`v-x=vec 0<=> x=v`];(*5*)
10301
10302 MP_TAC(ISPEC`norm((v:real^3)-(x:real^3))`REAL_MUL_LINV)
10303 THEN REWRITE_TAC[REAL_ARITH`A*B*D *D=(B*D) *D *A`;REAL_ARITH`A>B<=> B<A`]
10304 THEN RESA_TAC
10305 THEN REDUCE_ARITH_TAC
10306 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
10307 THEN STRIP_TAC
10308 THENL(*6*)[
10309 MATCH_MP_TAC REAL_LT_LMUL
10310 THEN MP_TAC(REAL_ARITH`~(norm (v - x:real^3) = &0)/\ &0 <= norm (v - x)==> &0< norm (v - x) `)
10311 THEN RESA_TAC
10312 THEN MATCH_MP_TAC COS_MONO_LT
10313 THEN ASM_REWRITE_TAC[];(*6*)
10314
10315 MRESA_TAC condition1_to_in_aff_gt_by_angle[`x:real^3`;`v:real^3`;`va:real^3`;`s1:real`]
10316 THEN POP_ASSUM MP_TAC
10317 THEN REWRITE_TAC[e3_fan]](*6*)](*5*);(*4*)
10318 SUBGOAL_THEN`&0<(atn ((norm ((v - x) cross (va - x))) * inv((v - x) dot (va - x))))` ASSUME_TAC
10319 THENL(*5*)[
10320 MP_TAC(ISPEC`(v - x) dot (va - x:real^3)`REAL_LT_INV)
10321 THEN RESA_TAC
10322 THEN ASSUME_TAC(PI_WORKS)
10323 THEN MP_TAC(REAL_ARITH`&0< pi ==> --(pi / &2) < &0`)
10324 THEN RESA_TAC
10325 THEN MRESAL_TAC  ATN_MONO_LT[`&0:real`;` (norm ((v - x) cross (va - x)) * inv ((v - x) dot (va - x))):real`][ ATN_0]
10326 THEN POP_ASSUM MATCH_MP_TAC
10327 THEN MATCH_MP_TAC REAL_LT_MUL
10328 THEN ASM_REWRITE_TAC[]
10329 THEN SUBGOAL_THEN`~(norm((v - x) cross (va - x:real^3))= &0)` ASSUME_TAC
10330 THENL(*6*)[ASM_REWRITE_TAC[NORM_EQ_0]
10331 THEN MP_TAC(ISPECL[`v-x:real^3`;`va-x:real^3`]CROSS_EQ_0)
10332 THEN ONCE_REWRITE_TAC[GSYM COLLINEAR_3;]
10333 THEN RESA_TAC
10334 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
10335 THEN ASM_REWRITE_TAC[];
10336 POP_ASSUM MP_TAC
10337 THEN MP_TAC(ISPEC`(v - x) cross (va - x:real^3)`NORM_POS_LE)
10338 THEN REAL_ARITH_TAC];(*5*)
10339
10340 ABBREV_TAC`s1= min (s:real) (atn ((norm ((v - x) cross (va - x))) * inv((v - x) dot (va - x)))) / &2`
10341 THEN ASSUME_TAC(ISPEC`(norm ((v - x) cross (u - x)) * inv ((v - x) dot (u - x))):real`ATN_BOUNDS)
10342 THEN MP_TAC(REAL_ARITH`&0< s /\ s< pi/ &2/\ s1= min (s:real) (atn ((norm ((v - x) cross (va - x))) * inv((v - x) dot (va - x)))) / &2
10343  /\ &0< pi /\  &0< (atn ((norm ((v - x) cross (va - x))) * inv((v - x) dot (va - x))))
10344 /\ (atn ((norm ((v - x) cross (va - x))) * inv((v - x) dot (va - x)))) < pi/ &2
10345 ==> &0<= s1 /\ s1< s /\  s <= pi/\ &0<s1 /\ s1<pi/ &2
10346 /\  s1< (atn ((norm ((v - x) cross (va - x))) * inv((v - x) dot (va - x))))
10347 `)
10348 THEN REWRITE_TAC[PI_WORKS]
10349 THEN RESA_TAC
10350 THEN EXISTS_TAC`sin (s1) % (e1_fan x v va) + (cos s1) %(e3_fan x v va)+x :real^3 `
10351 THEN REWRITE_TAC[dist;vector_norm;VECTOR_ARITH`(B+C+A)-A=(B+C:real^3)`; DOT_LADD;DOT_RADD;DOT_RMUL;DOT_LMUL;]
10352 THEN MRESAL_TAC properties_coordinate[`x:real^3`;`v:real^3`;`va:real^3`][orthonormal]
10353 THEN ONCE_REWRITE_TAC[DOT_SYM]
10354 THEN ASSUME_TAC(ISPEC`s1:real`SIN_CIRCLE)
10355 THEN ASM_REWRITE_TAC[]
10356 THEN REDUCE_ARITH_TAC
10357 THEN ASM_REWRITE_TAC[REAL_ARITH`sin s * sin s + cos s * cos s =(sin s) pow 2 + (cos s) pow 2`;e3_fan;DOT_RMUL; ]
10358 THEN ONCE_REWRITE_TAC[GSYM vector_norm;]
10359 THEN REWRITE_TAC[DOT_SQUARE_NORM;]
10360 THEN MRESAL1_TAC  SQRT_POW_2`&1`[REAL_ARITH`a pow 2 = a * a`;REAL_ARITH`&0<= &1`;]
10361 THEN POP_ASSUM MP_TAC
10362 THEN MRESAL_TAC SQRT_MUL[`&1`;`&1`][REAL_ARITH`&0<= &1`;]
10363 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th); REAL_ARITH`&1* &1= &1`])
10364 THEN RESA_TAC
10365 THEN REDUCE_ARITH_TAC
10366 THEN SUBGOAL_THEN`~(norm((v:real^3)-(x:real^3))= &0)` ASSUME_TAC
10367 THENL(*6*)[ASM_REWRITE_TAC[NORM_EQ_0;VECTOR_ARITH`v-x=vec 0<=> x=v`];(*6*)
10368 MP_TAC(ISPEC`norm((v:real^3)-(x:real^3))`REAL_MUL_LINV)
10369 THEN REWRITE_TAC[REAL_ARITH`A*B*D *D=(B*D) *D *A`;REAL_ARITH`A>B<=> B<A`]
10370 THEN RESA_TAC
10371 THEN REDUCE_ARITH_TAC
10372 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
10373 THEN STRIP_TAC
10374 THENL(*7*)[
10375 MATCH_MP_TAC REAL_LT_LMUL
10376 THEN MP_TAC(REAL_ARITH`~(norm (v - x:real^3) = &0)/\ &0 <= norm (v - x)==> &0< norm (v - x) `)
10377 THEN RESA_TAC
10378 THEN MATCH_MP_TAC COS_MONO_LT
10379 THEN ASM_REWRITE_TAC[];
10380 MRESA_TAC condition_to_in_aff_gt_by_angle[`x:real^3`;`v:real^3`;`va:real^3`;`s1:real`]
10381 THEN POP_ASSUM MP_TAC
10382 THEN REWRITE_TAC[e3_fan]]]]]]]]);;
10383
10384
10385 let scale_in_edges_fan=prove(`!(x:real^3) (v:real^3) (u:real^3) (w:real^3). 
10386 DISJOINT {x} {v,u}
10387 /\ w IN aff_gt {x} {v,u}
10388 ==> 
10389 (?a t:real. &0<a /\ &0<t /\ t< &1
10390 /\ a%(w-x) = (&1-t)% v+ t%u-x)`,
10391
10392 REPEAT STRIP_TAC
10393 THEN POP_ASSUM MP_TAC
10394 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
10395 THEN STRIP_TAC
10396 THEN POP_ASSUM MP_TAC
10397 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`w = t1 % x + t2 % v + t3 % u 
10398 <=> w-x = ((t1+t2+t3)- &1) % x + (((t1+t2+t3) -t1)- t3)% (v-x) + t3 % (u-x):real^3`]
10399 THEN ASM_REWRITE_TAC[REAL_ARITH`&1- &1= &0`] THEN REDUCE_VECTOR_TAC
10400 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1 ==> ~(&1-t1= &0)/\ &0< &1- t1`)
10401 THEN RESA_TAC
10402 THEN MRESA1_TAC REAL_MUL_LINV `(&1-t1:real)`
10403 THEN MRESA1_TAC REAL_LT_INV `(&1-t1:real)`
10404 THEN MRESA_TAC REAL_LT_MUL [`inv(&1-t1:real)`;`t3:real`]
10405 THEN MRESA_TAC REAL_LT_MUL [`inv(&1-t1:real)`;`t2:real`]
10406 THEN POP_ASSUM MP_TAC
10407 THEN ONCE_REWRITE_TAC[REAL_ARITH`inv (&1 - t1) * t2=inv (&1 - t1) * ((t1+t2+t3)-t1)- inv(&1-t1)*t3:real`]
10408 THEN RESA_TAC
10409 THEN STRIP_TAC
10410 THEN MP_TAC(SET_RULE`
10411 w - x = (&1 - t1 - t3) % (v - x) + t3 % (u - x):real^3
10412 ==> (inv (&1- t1))%(w - x ) = (inv (&1-t1))%((&1 - t1 - t3) % (v - x) + t3 % (u - x))
10413 `)
10414 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
10415 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`;REAL_ARITH`inv (&1 - t1) * (&1 - t1 - t3)=inv (&1 - t1) * (&1 - t1) - inv (&1 - t1) * (t3)`;VECTOR_ARITH`(&1-A)%(U-X)+A%(V-X)=(&1-A)%U+A%V-X`]
10416 THEN REDUCE_VECTOR_TAC
10417 THEN STRIP_TAC
10418 THEN EXISTS_TAC`inv(&1- t1:real)`
10419 THEN EXISTS_TAC`inv(&1-t1) *t3:real`
10420 THEN ASM_REWRITE_TAC[REAL_ARITH`A< &1<=> &0< &1- A`]);;
10421
10422
10423
10424 let aff_gt_imp_not_collinear=prove(`!x u v w:real^3.
10425 ~collinear{x,v,u}/\ w IN aff_gt{x,v} {u}==> ~collinear{x,v,w}`,
10426 REPEAT STRIP_TAC
10427 THEN POP_ASSUM MP_TAC
10428 THEN POP_ASSUM MP_TAC
10429 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
10430 THEN POP_ASSUM MP_TAC
10431 THEN MRESAL_TAC  AFF_GT_2_1[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
10432 THEN ASM_REWRITE_TAC[collinear_fan;aff;AFFINE_HULL_2;IN_ELIM_THM;]
10433 THEN DISCH_THEN(LABEL_TAC"A")
10434 THEN REPEAT STRIP_TAC
10435 THEN REMOVE_THEN "A" MP_TAC
10436 THEN ASM_REWRITE_TAC[]
10437 THEN POP_ASSUM MP_TAC
10438 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % u = u' % x + v' % v<=>
10439 t3 % u = (u'-t1) % x + (v'-t2) % v`]
10440 THEN MP_TAC(REAL_ARITH`&0<t3==> ~(t3= &0)`) THEN RESA_TAC
10441 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
10442 THEN STRIP_TAC
10443 THEN MP_TAC(SET_RULE`t3 % u = (u' - t1) % x + (v' - t2) % v:real^3
10444  ==> (inv (t3))%(t3 % u ) = (inv (t3))%( (u' - t1) % x + (v' - t2) % v)`)
10445 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
10446 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
10447 THEN REDUCE_VECTOR_TAC
10448 THEN STRIP_TAC
10449 THEN EXISTS_TAC`(inv (t3)) * (u' - t1):real`
10450 THEN EXISTS_TAC`(inv (t3)) * (v' -t2):real`
10451 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t3) * (u' - t1) + inv (t3) * (v'- t2)
10452 = inv (t3) * (t3+ (u'+v')- (t1 + t2 +t3)):real`; REAL_ARITH`A+ &1- &1= A`]);;
10453
10454
10455 let conditions_in_rcone_fan=prove(`!x v u w:real^3 s:real.
10456 ~collinear {x,v,u}/\ w IN aff_gt {x} {v,u} /\ &0<s /\ s< pi/ &2 /\u IN rcone_fan x v (cos s)==> w IN rcone_fan x v (cos s) `,
10457
10458 REWRITE_TAC[rcone_fan;IN_ELIM_THM]
10459 THEN REPEAT STRIP_TAC
10460 THEN ASM_TAC
10461 THEN DISCH_TAC
10462 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(u:real^3)`;]
10463 THEN MRESAL_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;` (u:real^3)  `;][IN_ELIM_THM]
10464 THEN REPEAT STRIP_TAC
10465 THEN POP_ASSUM MP_TAC
10466 THEN ASM_REWRITE_TAC[dist;VECTOR_ARITH`(t1 % x + t2 % v + t3 % u) - x=((t1+t2+t3)- &1) % x + t2 % (v-x) + t3 % (u-x)`;REAL_ARITH`&1 - &1= &0`;REAL_ARITH`A>B<=> B<A`;DOT_LADD;DOT_LMUL]
10467 THEN REDUCE_VECTOR_TAC
10468 THEN REDUCE_ARITH_TAC
10469 THEN STRIP_TAC
10470 THEN MP_TAC(REAL_ARITH`&0< t3==> &0<= t3`) THEN RESA_TAC
10471 THEN MRESA1_TAC REAL_ABS_REFL`t3:real`
10472 THEN MRESA_TAC NORM_MUL[`t3:real`;`u-x:real^3`]
10473 THEN MP_TAC(REAL_ARITH`&0< t2==> &0<= t2`) THEN RESA_TAC
10474 THEN MRESA1_TAC REAL_ABS_REFL`t2:real`
10475 THEN MRESA_TAC NORM_MUL[`t2:real`;`v-x:real^3`]
10476 THEN MRESA_TAC REAL_LT_LMUL[`t3:real`;`norm (u - x) * norm (v - x:real^3) * (cos s):real`;`(u - x) dot (v - x:real^3)`]
10477 THEN MRESA1_TAC COS_BOUNDS`s:real`
10478 THEN MRESA1_TAC DOT_POS_LE`(v - x):real^3`
10479 THEN MRESA_TAC REAL_LE_MUL[`t2:real`;`(v-x) dot (v-x:real^3)`;]
10480 THEN MRESA_TAC REAL_LE_LMUL[`t2*((v - x:real^3) dot (v-x)):real`;`cos s:real`;`&1`]
10481 THEN POP_ASSUM MP_TAC THEN REDUCE_ARITH_TAC 
10482 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[DOT_SQUARE_NORM;]
10483 THEN STRIP_TAC
10484 THEN MP_TAC(REAL_ARITH` t3 * norm (u - x) * norm (v - x) * cos s< t3 * ((u - x) dot (v - x))
10485 /\(t2 * norm (v - x) pow 2) * cos s <= t2 * ((v - x) dot (v - x))
10486 ==> (t2 * norm (v - x:real^3)  + t3 * norm (u - x)) * norm (v - x) * cos s< t2 * ((v - x) dot (v - x))+ t3 * ((u - x) dot (v - x))`)
10487 THEN RESA_TAC
10488 THEN MRESA_TAC NORM_TRIANGLE[`t2 %(v - x:real^3)`;`t3 % (u - x:real^3)`]
10489 THEN MRESA1_TAC NORM_POS_LE`(v - x):real^3`
10490 THEN MRESA1_TAC COS_POS_PI2`(s):real`
10491 THEN MP_TAC(REAL_ARITH`&0< cos s:real ==> &0<= cos s`) THEN RESA_TAC
10492 THEN MRESA_TAC REAL_LE_MUL[`norm  (v-x:real^3)`;`cos s:real`]
10493 THEN MRESA_TAC REAL_LE_RMUL[`norm (t2 % (v - x) + t3 % (u - x):real^3):real`;`t2 * norm (v - x:real^3) + t3 * norm (u - x)`;`norm (v - x:real^3) * cos s`]
10494 THEN POP_ASSUM MP_TAC
10495 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
10496 THEN POP_ASSUM MP_TAC
10497 THEN REAL_ARITH_TAC);;
10498
10499
10500 let exists_point_inside_domain_cone_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 s:real.
10501 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
10502 /\ sigma_fan x V E u w = v
10503 /\ &0<s /\ s<pi/ &2
10504 /\ fan80(x,V,E)
10505 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
10506 ==>
10507 (?y:real^3. y IN rw_dart_fan x V E ((x:real^3),(u:real^3),(w:real^3),(w2:real^3)) (cos(s)) /\
10508 azim x v u y< azim x v u w)`,
10509 REPEAT STRIP_TAC
10510 THEN POP_ASSUM MP_TAC
10511 THEN POP_ASSUM MP_TAC
10512 THEN DISCH_THEN(LABEL_TAC "BE")
10513 THEN DISCH_THEN(LABEL_TAC"EM")
10514 THEN USE_THEN "BE" MP_TAC
10515 THEN REWRITE_TAC[fan80]
10516 THEN DISCH_TAC
10517 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
10518 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
10519 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
10520 ` (v:real^3)`]
10521 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
10522 ` (u:real^3)`]
10523 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `u:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
10524 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge u V E = {w} \/ ~(set_of_edge u V E = {w:real^3})`)
10525 THENL(*1*)[
10526 MRESA_TAC CARD_SING[`w:real^3`; `(set_of_edge u V E):real^3->bool`]
10527 THEN POP_ASSUM MP_TAC
10528 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
10529 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN ARITH_TAC;(*1*)
10530
10531 MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`; `w:real^3`]
10532 THEN POP_ASSUM(fun th-> MRESA1_TAC th `s:real`)
10533 THEN POP_ASSUM MP_TAC
10534 THEN ASM_REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;rw_dart_fan;INTER; w_dart_fan;wedge;IN_ELIM_THM;]
10535 THEN STRIP_TAC
10536 THEN MP_TAC(REAL_ARITH`azim x u w y< azim x u w v==> azim x u w y<= azim x u w (v:real^3)`)
10537 THEN RESA_TAC
10538 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`u:real^3`;`w:real^3`;`y:real^3`;`v:real^3`]
10539 THEN POP_ASSUM MP_TAC
10540 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10541 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"YEU EM")
10542 THEN MP_TAC(REAL_ARITH`azim x u w y< azim x u w v/\ &0< azim x u w y/\ azim x u w v < pi /\ azim x u w v = azim x u w y + azim x u y v==>  ~(azim x u y (v:real^3)= &0)/\ &0< azim x u y v/\ azim x u y v < pi/\ ~(azim x u y (v:real^3)= pi)`)
10543 THEN RESA_TAC
10544 THEN POP_ASSUM MP_TAC
10545 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`y:real^3`;`v:real^3`]
10546 THEN POP_ASSUM MP_TAC
10547 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10548 THEN RESA_TAC
10549 THEN POP_ASSUM MP_TAC
10550 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
10551 THEN REPEAT DISCH_TAC
10552 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`y:real^3`;`u:real^3`]
10553 THEN SUBGOAL_THEN`~(azim x v u (y:real^3)= &0)`ASSUME_TAC
10554 THENL(*2*)[
10555 STRIP_TAC
10556 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10557 THEN POP_ASSUM MP_TAC
10558 THEN REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
10559 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`y:real^3`;`v:real^3`]
10560 THEN POP_ASSUM MATCH_MP_TAC
10561 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10562 THEN ASM_REWRITE_TAC[];(*2*)
10563
10564 SUBGOAL_THEN`~(azim x v u (y:real^3)= pi)`ASSUME_TAC
10565 THENL(*3*)[
10566
10567 STRIP_TAC
10568 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10569 THEN POP_ASSUM MP_TAC
10570 THEN REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
10571 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`y:real^3`;`v:real^3`]
10572 THEN POP_ASSUM MATCH_MP_TAC
10573 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10574 THEN ASM_REWRITE_TAC[];(*3*)
10575
10576 MP_TAC(REAL_ARITH`~(azim x v u y=pi)==>pi< azim x v u y  \/ azim x v u (y:real^3) < pi`)
10577 THEN RESA_TAC
10578 THENL(*4*)[
10579
10580 MRESA_TAC AZIM_COMPL[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10581 THEN MRESA_TAC azim[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10582 THEN MP_TAC(REAL_ARITH`pi< azim x v u y /\ azim x v u y < &2 * pi /\ azim x v y u = &2 * pi - azim x v u y
10583 ==> azim x v y u< pi/\ &0<azim x v y u  `)
10584 THEN RESA_TAC
10585 THEN POP_ASSUM MP_TAC
10586 THEN POP_ASSUM MP_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
10587 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
10588 THEN REPEAT STRIP_TAC
10589 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10590 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`u:real^3`;`v:real^3`;`y:real^3`]
10591 THEN POP_ASSUM MP_TAC
10592 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;CROSS_TRIPLE;]
10593 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
10594 THEN ASM_REWRITE_TAC[DOT_LNEG]
10595 THEN POP_ASSUM MP_TAC
10596 THEN REAL_ARITH_TAC;(*4*)
10597         
10598 DISJ_CASES_TAC(REAL_ARITH`azim x v u w <= azim x v u (y:real^3) \/ azim x v u y < azim x v u w`)
10599 THENL(*5*)[
10600 ABBREV_TAC`a1=(v-x):real^3`
10601 THEN ABBREV_TAC`a2=(y-x):real^3`
10602 THEN ABBREV_TAC`a3=(u-x) :real^3`
10603 THEN ABBREV_TAC`a4=w-x:real^3`
10604 THEN ABBREV_TAC`va=a1 cross a4:real^3`
10605 THEN ABBREV_TAC`vb=a2 cross a3:real^3`
10606 THEN ABBREV_TAC`v3= (vb:real^3) cross (va:real^3)+(x:real^3)`
10607 THEN ABBREV_TAC`v4= &1/ &2 % v3+ &1/ &2 % u:real^3`
10608 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
10609 THEN POP_ASSUM MP_TAC
10610 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;CROSS_TRIPLE;]
10611 THEN ONCE_REWRITE_TAC[CROSS_SKEW; ]
10612 THEN ASM_REWRITE_TAC[DOT_LNEG] 
10613 THEN STRIP_TAC
10614 THEN SUBGOAL_THEN `v3 IN aff_gt {x,u} {y:real^3}` ASSUME_TAC
10615 THENL(*6*)[
10616 MRESA_TAC th3[`(x:real^3)` ;` (u:real^3)`;`(y:real^3) `;]
10617 THEN MRESAL_TAC  AFF_GT_2_1[`x:real^3`;`u:real^3`;`y:real^3`][IN_ELIM_THM]
10618 THEN EXISTS_TAC`&1-(va:real^3) dot (a2:real^3)+va dot (a3:real^3)`
10619 THEN EXISTS_TAC`((va:real^3) dot (a2:real^3))`
10620 THEN EXISTS_TAC`(--((va:real^3) dot (a3:real^3)))`
10621 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - va dot a3 + va dot a2) + (va dot a3) + --(va dot a2) = &1`;VECTOR_ARITH`(&1-A+B)%X+ (A)%U+ (--B) %V=A%(U-X)- B%(V-X)+X`]
10622 THEN EXPAND_TAC"v3"
10623 THEN EXPAND_TAC"vb" 
10624 THEN ONCE_REWRITE_TAC[CROSS_SKEW; ]
10625 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_ARITH`--(A-B)+C=B-A+C:real^3`];(*6*)
10626 SUBGOAL_THEN `(v4:real^3) IN aff_gt {x,u} {y:real^3}` ASSUME_TAC
10627 THENL(*7*)[
10628 POP_ASSUM MP_TAC 
10629 THEN MRESA_TAC th3[`(x:real^3)` ;` (u:real^3)`;`(y:real^3) `;]
10630 THEN MRESAL_TAC  AFF_GT_2_1[`x:real^3`;`u:real^3`;`y:real^3`][IN_ELIM_THM]
10631 THEN STRIP_TAC
10632 THEN EXISTS_TAC`&1/ &2 * t1:real`
10633 THEN EXISTS_TAC`&1/ &2 * t2+ &1/ &2:real`
10634 THEN EXISTS_TAC`&1/ &2*t3:real`
10635 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 / &2 * t1 + (&1 / &2 * t2 + &1 / &2) + &1 / &2 * t3 = &1/ &2*(t1+t2+t3)+ &1/ &2`; REAL_ARITH`&1/ &2 * &1 + &1/ &2= &1`;VECTOR_ARITH`(&1 / &2 * t1) % x + (&1 / &2 * t2 + &1 / &2) % u + (&1 / &2 * t3) % y= &1/ &2 %(t1 % x + t2 % u + t3 % y)+ &1/ &2 % u`]
10636 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
10637 THEN ASM_REWRITE_TAC[]
10638 THEN MATCH_MP_TAC REAL_LT_MUL
10639 THEN ASM_REWRITE_TAC[]
10640 THEN REAL_ARITH_TAC;(*7*)
10641 MRESA_TAC aff_gt_imp_not_collinear[`x:real^3`;`y:real^3`;`u:real^3`; `v4:real^3`]
10642 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`; `v4:real^3`;`y:real^3`]
10643 THEN EXISTS_TAC`v4:real^3`
10644 THEN ASM_REWRITE_TAC[]
10645 THEN SUBGOAL_THEN `v3 IN aff_gt {x,v} {w:real^3}` ASSUME_TAC
10646 THENL(*8*)[
10647
10648 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`]
10649 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
10650 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(w:real^3) `;]
10651 THEN MRESAL_TAC  AFF_GT_2_1[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
10652 THEN EXISTS_TAC`&1-(vb:real^3) dot (a4:real^3)+vb dot (a1:real^3)`
10653 THEN EXISTS_TAC`((vb:real^3) dot (a4:real^3))`
10654 THEN EXISTS_TAC`(--((vb:real^3) dot (a1:real^3)))`
10655 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - vb dot a4 + vb dot a1) + (vb dot a4) + --(vb dot a1) = &1`;VECTOR_ARITH`(&1-A+B)%X+ (A)%U+ (--B) %V=A%(U-X)- B%(V-X)+X`]
10656 THEN EXPAND_TAC"v3"
10657 THEN EXPAND_TAC"va" 
10658 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_ARITH`--(A-B)+C=B-A+C:real^3`]
10659 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`;`y:real^3`;`u:real^3`]
10660 THEN POP_ASSUM MP_TAC
10661 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;CROSS_TRIPLE;]
10662 THEN ONCE_REWRITE_TAC[CROSS_SKEW; ]
10663 THEN ASM_REWRITE_TAC[DOT_LNEG] 
10664 THEN DISCH_TAC
10665 THEN POP_ASSUM MATCH_MP_TAC
10666 THEN MRESA_TAC azim[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10667 THEN FIND_ASSUM(MP_TAC)`~(azim x v u (y:real^3)= &0)`
10668 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
10669 THEN REAL_ARITH_TAC;(*8*)
10670
10671 REMOVE_THEN "YEU EM"(fun th-> ASM_REWRITE_TAC[SYM(th)])
10672 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`]
10673 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
10674 THEN MRESA_TAC aff_gt_imp_not_collinear[`x:real^3`;`w:real^3`;`v:real^3`; `v3:real^3`]
10675 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`; `v3:real^3`;`w:real^3`]
10676 THEN SUBGOAL_THEN`~(coplanar{x,v,u,v3:real^3})`ASSUME_TAC
10677 THENL(*9*)[
10678 STRIP_TAC
10679 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`v3:real^3`]
10680 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`];(*9*)
10681
10682 SUBGOAL_THEN`~(azim x u v3 (v:real^3)= &0)`ASSUME_TAC
10683 THENL(*10*)[
10684 POP_ASSUM MP_TAC
10685 THEN MATCH_MP_TAC MONO_NOT
10686 THEN ASM_REWRITE_TAC[]
10687 THEN STRIP_TAC
10688 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v3:real^3`;`v:real^3`]
10689 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
10690 THEN ASM_REWRITE_TAC[];(*10*)
10691 MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`v3:real^3`]
10692 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`v:real^3`; `v3:real^3`;`y:real^3`]
10693 THEN POP_ASSUM MP_TAC
10694 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;]
10695 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"YEU EM")
10696 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`y:real^3`;`v:real^3`]
10697 THEN POP_ASSUM MP_TAC
10698 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;]
10699 THEN RESA_TAC
10700 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`v3:real^3`;`v:real^3`]
10701 THEN POP_ASSUM MP_TAC
10702 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;]
10703 THEN RESA_TAC
10704 THEN MP_TAC(REAL_ARITH`&2 * pi - azim x u y v = &2 * pi - azim x u v3 v==> azim x u v3 v= azim x u y v  `)
10705 THEN RESA_TAC
10706 THEN MRESAL_TAC inequality4_aim_in_convex_fan[`x:real^3`;`v:real^3`;`u:real^3`;`v3:real^3`;`&1/ &2`][REAL_ARITH`&1- &1/ &2= &1/ &2/\ &0< &1/ &2 /\ &1/ &2< &1`;VECTOR_ARITH`A+B=B+A:real^3`]
10707 THEN MATCH_MP_TAC  conditions_in_rcone_fan
10708 THEN EXISTS_TAC `y:real^3`
10709 THEN ASM_REWRITE_TAC[]
10710 THEN MRESA_TAC th3[`(x:real^3)` ;` (u:real^3)`;`(y:real^3) `;]
10711 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`u:real^3`;`y:real^3`][IN_ELIM_THM]
10712 THEN EXISTS_TAC`&1/ &2 *(&1-(va:real^3) dot (a2:real^3)+va dot (a3:real^3))`
10713 THEN EXISTS_TAC`&1/ &2 *((va:real^3) dot (a2:real^3))+ &1/ &2`
10714 THEN EXISTS_TAC`&1/ &2 *(--((va:real^3) dot (a3:real^3)))`
10715 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 / &2 * t1 + (&1 / &2 * t2 + &1 / &2) + &1 / &2 * t3 = &1/ &2*(t1+t2+t3)+ &1/ &2`; REAL_ARITH`&1/ &2 * &1 + &1/ &2= &1`;VECTOR_ARITH`(&1 / &2 * t1) % x + (&1 / &2 * t2 + &1 / &2) % u + (&1 / &2 * t3) % y= &1/ &2 %(t1 % x + t2 % u + t3 % y)+ &1/ &2 % u`;REAL_ARITH`(&1 - va dot a3 + va dot a2) + (va dot a3) + --(va dot a2) = &1`;VECTOR_ARITH`(&1-A+B)%X+ (A)%U+ (--B) %V=A%(U-X)- B%(V-X)+X`]
10716 THEN EXPAND_TAC"v4"
10717 THEN EXPAND_TAC"v3"
10718 THEN EXPAND_TAC"vb" 
10719 THEN ONCE_REWRITE_TAC[CROSS_SKEW; ]
10720 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_ARITH`--(A-B)+C=B-A+C:real^3`]
10721 THEN MP_TAC(REAL_ARITH`&0< --(va dot (a3:real^3))==> &0 < &1 / &2 * --(va dot a3)`)
10722 THEN RESA_TAC
10723 THEN MATCH_MP_TAC(REAL_ARITH`&0<= (va dot (a2:real^3))==> &0 < &1 / &2 * (va dot a2)+ &1/ &2`)
10724 THEN MRESA_TAC cross_dot_fully_surrounded_ge_fan[`x:real^3`;`v:real^3`;`y:real^3`;`w:real^3`]
10725 THEN POP_ASSUM MATCH_MP_TAC
10726 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`y:real^3`]
10727 THEN REWRITE_TAC[azim]
10728 THEN MATCH_MP_TAC(REAL_ARITH`azim x v u y = azim x v u w + azim x v w y/\ &0<= azim x v u w /\ azim x v u y < pi ==>azim x v w y <= pi`)
10729 THEN ASM_REWRITE_TAC[azim]](*10*)](*9*)](*8*)](*7*)](*6*);(*5*)
10730 EXISTS_TAC`y:real^3`
10731 THEN REMOVE_THEN "YEU EM" (fun th-> REWRITE_TAC[SYM(th)])       
10732 THEN ASM_REWRITE_TAC[]]]]]]);;
10733 let cut_in_angle_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 y:real^3.
10734  ~coplanar {x,v,u,w} /\ ~collinear {x,u,y}
10735 /\ &0< azim x u w v /\ azim x u w v< pi
10736 /\ azim x u w y< azim x u w v /\ &0< azim x u w y
10737 ==> let a1=(v-x):real^3 in
10738     let a2=w-x:real^3 in
10739     let a3=(y-x):real^3 in
10740     let a4=(u-x) :real^3 in
10741         let va=a1 cross a2:real^3 in
10742     let vb=a3 cross a4:real^3 in
10743     let v3= (vb:real^3) cross (va:real^3)+(x:real^3)
10744 in v3 IN aff_gt {x} {v,w:real^3}`,
10745
10746 REPEAT STRIP_TAC
10747 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
10748 THEN ABBREV_TAC`a1=(v-x):real^3`
10749 THEN ABBREV_TAC`a2=(y-x):real^3`
10750 THEN ABBREV_TAC`a3=(u-x) :real^3`
10751 THEN ABBREV_TAC`a4=w-x:real^3`
10752 THEN ABBREV_TAC`va=a1 cross a4:real^3`
10753 THEN ABBREV_TAC`vb=a2 cross a3:real^3`
10754 THEN ABBREV_TAC`v3= (vb:real^3) cross (va:real^3)+(x:real^3)`
10755 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
10756 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(w:real^3) `;]
10757 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
10758 THEN EXISTS_TAC`&1-(vb:real^3) dot (a4:real^3)+vb dot (a1:real^3)`
10759 THEN EXISTS_TAC`((vb:real^3) dot (a4:real^3))`
10760 THEN EXISTS_TAC`(--((vb:real^3) dot (a1:real^3)))`
10761 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - vb dot a4 + vb dot a1) + (vb dot a4) + --(vb dot a1) = &1`;VECTOR_ARITH`(&1-A+B)%X+ (A)%U+ (--B) %V=A%(U-X)- B%(V-X)+X`]
10762 THEN EXPAND_TAC"v3"
10763 THEN EXPAND_TAC"va" 
10764 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_ARITH`--(A-B)+C=B-A+C:real^3`]
10765 THEN MP_TAC(REAL_ARITH`azim x u w v< pi
10766 /\ azim x u w y< azim x u w v==>azim x u w (y:real^3)< pi`)
10767 THEN RESA_TAC
10768 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`u:real^3`;`y:real^3`;`w:real^3`]
10769 THEN POP_ASSUM MP_TAC
10770 THEN ONCE_REWRITE_TAC[CROSS_SKEW; ]
10771 THEN ASM_REWRITE_TAC[DOT_LNEG] 
10772 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE;] THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
10773 THEN ASM_REWRITE_TAC[DOT_LNEG;REAL_ARITH`--(--A)=A`]
10774 THEN DISCH_TAC
10775 THEN MP_TAC(REAL_ARITH`azim x u w y< azim x u w v==> azim x u w y<= azim x u w (v:real^3)`)
10776 THEN RESA_TAC
10777 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`u:real^3`;`w:real^3`;`y:real^3`;`v:real^3`]
10778 THEN POP_ASSUM MP_TAC
10779 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10780 THEN RESA_TAC
10781 THEN MP_TAC(REAL_ARITH`azim x u w y< azim x u w v/\ &0< azim x u w y/\ azim x u w v < pi /\ azim x u w v = azim x u w y + azim x u y v==>  ~(azim x u y (v:real^3)= &0)/\ &0< azim x u y v/\ azim x u y v < pi/\ ~(azim x u y (v:real^3)= pi)`)
10782 THEN RESA_TAC
10783 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`u:real^3`;`v:real^3`;`y:real^3`]
10784 THEN POP_ASSUM MP_TAC
10785 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10786 THEN ONCE_REWRITE_TAC[CROSS_SKEW; ]
10787 THEN ASM_REWRITE_TAC[DOT_LNEG] );;
10788
10789 let aff_gt_1_2_scale_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3 a:real.
10790 &0< a /\ a % (u-x)= w-x /\ ~collinear {x,w,v}
10791 ==> aff_gt {x} {u,v} =aff_gt {x} {w,v}`,
10792 REPEAT GEN_TAC
10793 THEN GEOM_ORIGIN_TAC `x:real^3`
10794 THEN REDUCE_VECTOR_TAC
10795 THEN REPEAT STRIP_TAC 
10796 THEN MP_TAC(REAL_ARITH`&0<a:real==> ~(a= &0)`) THEN RESA_TAC
10797 THEN MRESA1_TAC REAL_MUL_LINV `a:real`
10798 THEN MRESA1_TAC REAL_LT_INV`a:real`
10799 THEN FIND_ASSUM(MP_TAC)`a %u=w:real^3`
10800 THEN STRIP_TAC
10801 THEN MP_TAC(SET_RULE`
10802 a%u=w:real^3
10803 ==> (inv (a))%(a%u) = (inv (a))%(w)`)
10804 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C:real^3`]
10805 THEN REWRITE_TAC[VECTOR_ARITH`&1 % u= inv a % w<=> inv a % w= u`]
10806 THEN STRIP_TAC
10807 THEN MRESA_TAC COLLINEAR_SPECIAL_SCALE[`a:real`;`u:real^3`;`v:real^3`]
10808 THEN MRESA_TAC th3[`((vec 0):real^3)` ;` (u:real^3)`;`(v:real^3) `;]
10809 THEN MRESA_TAC th3[`((vec 0):real^3)` ;` (w:real^3)`;`(v:real^3) `;]
10810 THEN MRESAL_TAC  AFF_GT_1_2[`(vec 0):real^3`;`u:real^3`;`v:real^3`][IN_ELIM_THM;EXTENSION]
10811 THEN MRESAL_TAC  AFF_GT_1_2[`(vec 0):real^3`;`w:real^3`;`v:real^3`][IN_ELIM_THM]
10812 THEN REDUCE_VECTOR_TAC
10813 THEN GEN_TAC THEN EQ_TAC
10814 THENL[ STRIP_TAC
10815 THEN EXISTS_TAC`&1- inv a * t2-t3:real`
10816 THEN EXISTS_TAC `inv a * t2:real`
10817 THEN EXISTS_TAC `t3:real`
10818 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - inv a * t2 - t3 + inv a * t2 + t3 = &1`;VECTOR_ARITH`(A*B)%C=B%(A%C)`]
10819 THEN MATCH_MP_TAC REAL_LT_MUL
10820 THEN ASM_REWRITE_TAC[];
10821 STRIP_TAC
10822 THEN EXISTS_TAC`&1- a * t2-t3:real`
10823 THEN EXISTS_TAC `a * t2:real`
10824 THEN EXISTS_TAC `t3:real`
10825 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - a * t2 - t3 + a * t2 + t3 = &1`;VECTOR_ARITH`(A*B)%C=B%(A%C)`]
10826 THEN MATCH_MP_TAC REAL_LT_MUL
10827 THEN ASM_REWRITE_TAC[]]);;
10828
10829
10830
10831 let exists_cut_rcone_fan_with_edge_run_fan=prove(
10832 `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 s:real.
10833 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
10834 /\ sigma_fan x V E u w = v
10835 /\ &0<s /\ s<pi/ &2
10836 /\ fan80(x,V,E)
10837 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
10838 ==>
10839 (?t:real. &0< t /\ t< &1 /\
10840 ~(rw_dart_fan x V E ((x:real^3),(u:real^3),(w:real^3),(sigma_fan x V E u w:real^3)) (cos(s)) INTER aff_gt {x} {v, (&1-t)%u+t%w}={}))`,
10841 REPEAT STRIP_TAC
10842 THEN POP_ASSUM MP_TAC
10843 THEN POP_ASSUM MP_TAC
10844 THEN DISCH_THEN(LABEL_TAC "BE")
10845 THEN DISCH_THEN(LABEL_TAC"EM")
10846 THEN USE_THEN "BE" MP_TAC
10847 THEN REWRITE_TAC[fan80]
10848 THEN DISCH_TAC
10849 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
10850 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
10851 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
10852 ` (v:real^3)`]
10853 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
10854 ` (u:real^3)`]
10855 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `u:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
10856 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge u V E = {w} \/ ~(set_of_edge u V E = {w:real^3})`)
10857 THENL[
10858 MRESA_TAC CARD_SING[`w:real^3`; `(set_of_edge u V E):real^3->bool`]
10859 THEN POP_ASSUM MP_TAC
10860 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
10861 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN ARITH_TAC;
10862 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`]
10863 THEN ASM_REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;rw_dart_fan;INTER; w_dart_fan;wedge;IN_ELIM_THM;]
10864 THEN MRESA_TAC inequality3_aim_in_convex_fan
10865 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
10866 THEN POP_ASSUM MP_TAC
10867 THEN DISCH_THEN(LABEL_TAC"NHO EM")
10868 THEN MRESA_TAC exists_point_inside_domain_cone_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;`s:real`]
10869 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC 
10870 THEN ASM_REWRITE_TAC[rw_dart_fan;INTER; w_dart_fan;wedge;IN_ELIM_THM;]
10871 THEN REPEAT STRIP_TAC
10872 THEN MP_TAC(REAL_ARITH`azim x u w y< azim x u w v==> azim x u w y<= azim x u w (v:real^3)`)
10873 THEN RESA_TAC
10874 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`u:real^3`;`w:real^3`;`y:real^3`;`v:real^3`]
10875 THEN POP_ASSUM MP_TAC
10876 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10877 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"YEU EM")
10878 THEN MP_TAC(REAL_ARITH`azim x u w y< azim x u w v/\ &0< azim x u w y/\ azim x u w v < pi /\ azim x u w v = azim x u w y + azim x u y v==>  ~(azim x u y (v:real^3)= &0)/\ &0< azim x u y v/\ azim x u y v < pi/\ ~(azim x u y (v:real^3)= pi)`)
10879 THEN RESA_TAC
10880 THEN POP_ASSUM MP_TAC
10881 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`y:real^3`;`v:real^3`]
10882 THEN POP_ASSUM MP_TAC
10883 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10884 THEN RESA_TAC
10885 THEN POP_ASSUM MP_TAC
10886 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
10887 THEN REPEAT DISCH_TAC
10888 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`y:real^3`;`u:real^3`]
10889 THEN SUBGOAL_THEN`~(azim x v u (y:real^3)= &0)`ASSUME_TAC
10890 THENL[STRIP_TAC
10891 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10892 THEN POP_ASSUM MP_TAC
10893 THEN REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
10894 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`y:real^3`;`v:real^3`]
10895 THEN POP_ASSUM MATCH_MP_TAC
10896 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10897 THEN ASM_REWRITE_TAC[];
10898 MP_TAC(REAL_ARITH`&0<= azim x v u (y:real^3) /\ ~(azim x v u y= &0)==> &0< azim x v u y`)
10899 THEN ASM_REWRITE_TAC[azim] THEN STRIP_TAC
10900 THEN MRESA_TAC angle_is_smallpi_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
10901 THEN ABBREV_TAC`a1=(v-x):real^3`
10902 THEN ABBREV_TAC`a2=(y-x):real^3`
10903 THEN ABBREV_TAC`a3=(u-x) :real^3`
10904 THEN ABBREV_TAC`a4=w-x:real^3`
10905 THEN ABBREV_TAC`va=a2 cross a1:real^3`
10906 THEN ABBREV_TAC`vb=a4 cross a3:real^3`
10907 THEN ABBREV_TAC`v3=(va:real^3) cross (vb:real^3)+(x:real^3)`
10908 THEN MRESA_TAC cut_in_angle_fan[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
10909 THEN POP_ASSUM MP_TAC
10910 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
10911 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
10912 THEN RESA_TAC
10913 THEN POP_ASSUM MP_TAC THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN DISCH_TAC
10914 THEN MRESA_TAC scale_in_edges_fan[`(x:real^3)`;`(u:real^3)`;`(w:real^3)`;`(v3:real^3)`]
10915 THEN EXISTS_TAC`t:real`
10916 THEN ASM_REWRITE_TAC[]
10917 THEN EXISTS_TAC`y:real^3`
10918 THEN REMOVE_THEN "YEU EM" (fun th-> REWRITE_TAC[SYM(th)])
10919 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10920 THEN ASM_REWRITE_TAC[]
10921 THEN MP_TAC(REAL_ARITH`&0<t:real==> ~(t= &0)`) THEN RESA_TAC
10922 THEN MP_TAC(REAL_ARITH`&0<a:real==> ~(a= &0)`) THEN RESA_TAC
10923 THEN MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
10924 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
10925 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`(&1 - t) % u + t % w:real^3`]
10926 THEN MRESAL_TAC aff_gt_1_2_scale_fan[`x:real^3`;`v:real^3`;`v3:real^3`;`(&1 - t) % u + t % w:real^3`;`a:real`][VECTOR_ARITH`(&1 - t) % u + t % w - x = ((&1 - t) % u + t % w) - x`]
10927 THEN POP_ASSUM MP_TAC
10928 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10929 THEN RESA_TAC
10930 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
10931 THEN MRESAL_TAC COLLINEAR_SPECIAL_SCALE[`a:real`;`(v3 - x):real^3`;`v-x:real^3`][VECTOR_ARITH`(&1 - t) % u + t % w - x = ((&1 - t) % u + t % w) - x`]
10932 THEN POP_ASSUM MP_TAC
10933 THEN EXPAND_TAC"a1"
10934 THEN ONCE_REWRITE_TAC[GSYM COLLINEAR_3]
10935 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,C,A}`]
10936 THEN ASM_REWRITE_TAC[]
10937 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10938 THEN STRIP_TAC
10939 THEN MRESA_TAC th3[`(x:real^3)` ;` (v3:real^3)`;`(v:real^3) `;]
10940 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v3:real^3`;`v:real^3`][IN_ELIM_THM;]
10941 THEN EXPAND_TAC"v3"
10942 THEN EXPAND_TAC"va"
10943 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
10944 THEN REWRITE_TAC[CROSS_LAGRANGE;]
10945 THEN MP_TAC(REAL_ARITH`azim x u w y < azim x u w v /\ azim x u w v< pi==> azim x u w y< pi`)
10946 THEN RESA_TAC
10947 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`u:real^3`;`y:real^3`;`w:real^3`]
10948 THEN POP_ASSUM MP_TAC
10949 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
10950 THEN ASM_REWRITE_TAC[DOT_LNEG]
10951 THEN STRIP_TAC
10952 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
10953 THEN POP_ASSUM MP_TAC
10954 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
10955 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
10956 THEN ASM_REWRITE_TAC[DOT_LNEG]
10957 THEN STRIP_TAC
10958 THEN MP_TAC(REAL_ARITH`&0< --(vb dot (a1:real^3))==> ~(--(vb dot (a1:real^3))= &0)`) THEN RESA_TAC
10959 THEN MRESA1_TAC REAL_MUL_LINV `(--(vb dot (a1:real^3)):real)`
10960 THEN MRESA1_TAC REAL_LT_INV `(--(vb dot (a1:real^3)):real)`
10961 THEN MRESA_TAC REAL_LT_MUL [`inv(--(vb dot (a1:real^3)):real)`;`--(vb dot (a2:real^3)):real`]
10962 THEN EXISTS_TAC`&1- inv (--(vb dot (a1:real^3)))- inv (--(vb dot a1)) * --(vb dot a2)`
10963 THEN EXISTS_TAC`inv (--(vb dot (a1:real^3)))`
10964 THEN EXISTS_TAC`inv (--(vb dot a1)) * --(vb dot (a2:real^3))`
10965 THEN ASM_REWRITE_TAC[REAL_ARITH`&1- T1 -T2 +T1 +T2 = &1`;VECTOR_ARITH`A%(--(B%X-C%Y)+Z)=(A*(--B))%X-(A*(--C))%Y+A%Z:real^3`]
10966 THEN EXPAND_TAC"a1"
10967 THEN EXPAND_TAC"a2"
10968 THEN VECTOR_ARITH_TAC]]);;
10969
10970
10971
10972
10973
10974
10975 let aff_gt_in_rw_dart_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 y:real^3 s:real.
10976 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
10977 /\ sigma_fan x V E u w = v
10978 /\ &0<s /\ s<pi/ &2
10979 /\ y IN rw_dart_fan x V E ((x:real^3),(u:real^3),(w:real^3),(v:real^3)) (cos(s)) 
10980 /\ fan80(x,V,E)
10981 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
10982 ==> aff_gt {x} {u,y} SUBSET rw_dart_fan x V E ((x:real^3),(u:real^3),(w:real^3),(sigma_fan x V E u w:real^3)) (cos(s)) `,
10983 REPEAT STRIP_TAC
10984 THEN POP_ASSUM MP_TAC
10985 THEN POP_ASSUM MP_TAC
10986 THEN POP_ASSUM MP_TAC
10987 THEN DISCH_THEN(LABEL_TAC "CON")
10988 THEN DISCH_THEN(LABEL_TAC "BE")
10989 THEN DISCH_THEN(LABEL_TAC"EM")
10990 THEN USE_THEN "BE" MP_TAC
10991 THEN REWRITE_TAC[fan80]
10992 THEN DISCH_TAC
10993 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
10994 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
10995 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
10996 ` (v:real^3)`]
10997 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
10998 ` (u:real^3)`]
10999 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `u:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
11000 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge u V E = {w} \/ ~(set_of_edge u V E = {w:real^3})`)
11001 THENL[MRESA_TAC CARD_SING[`w:real^3`; `(set_of_edge u V E):real^3->bool`]
11002 THEN POP_ASSUM MP_TAC
11003 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
11004 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN ARITH_TAC;
11005 REMOVE_THEN "CON" MP_TAC
11006 THEN ASM_REWRITE_TAC[rw_dart_fan;INTER; SUBSET; w_dart_fan;wedge;IN_ELIM_THM;]
11007 THEN STRIP_TAC THEN GEN_TAC THEN STRIP_TAC
11008 THEN MRESA_TAC aff_gt_inter_aff_gt [`(x:real^3)`;`(u:real^3)`;`(y:real^3)`]
11009 THEN MP_TAC(SET_RULE`aff_gt {x} {u, y} = aff_gt {x, u} {y} INTER aff_gt {x, y} {u}
11010 /\ x' IN aff_gt {x} {u, y:real^3} ==> x' IN aff_gt {x,u} {y}`) THEN RESA_TAC
11011 THEN MRESA_TAC aff_gt_imp_not_collinear[`x:real^3`;`y:real^3`;`u:real^3`; `x':real^3`]
11012 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`x':real^3`;`y:real^3`;]
11013 THEN MATCH_MP_TAC  conditions_in_rcone_fan
11014 THEN EXISTS_TAC`y:real^3`
11015 THEN ASM_REWRITE_TAC[]]);;
11016
11017 let in_aff_gt_1_2=prove(`!x:real^3 v:real^3 u:real^3 t:real.
11018 DISJOINT {x} {v,u} /\ &0< t /\ t< &1==>  (&1-t)% v+ t% u IN aff_gt {x} {v,u}`,
11019 REPEAT STRIP_TAC
11020 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM;]
11021 THEN EXISTS_TAC`&0`
11022 THEN EXISTS_TAC`&1 - t:real`
11023 THEN EXISTS_TAC`t:real`
11024 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1 - t<=> t< &1`;REAL_ARITH`&0 + &1 - t + t= &1`]
11025 THEN VECTOR_ARITH_TAC);;
11026
11027
11028 let exists_rw_dart_inter_aff_gt1_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 s:real.
11029 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
11030 /\ sigma_fan x V E u w = v
11031 /\ &0<s /\ s<pi/ &2
11032 /\ fan80(x,V,E)
11033 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11034 ==>
11035 (?h:real. &0< h /\
11036 (!t:real. &0< t /\ t< h==> 
11037 ~(rw_dart_fan x V E ((x:real^3),(u:real^3),(w:real^3),(sigma_fan x V E u w:real^3)) (cos(s)) INTER aff_gt {x} {v, (&1-t)%u+t%w}={})
11038 ))`,
11039
11040 REPEAT STRIP_TAC
11041 THEN POP_ASSUM MP_TAC
11042 THEN POP_ASSUM MP_TAC
11043 THEN DISCH_THEN(LABEL_TAC "BE")
11044 THEN DISCH_THEN(LABEL_TAC"EM")
11045 THEN USE_THEN "BE" MP_TAC
11046 THEN REWRITE_TAC[fan80]
11047 THEN DISCH_TAC
11048 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
11049 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
11050 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
11051 ` (v:real^3)`]
11052 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
11053 ` (u:real^3)`]
11054 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `u:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
11055 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge u V E = {w} \/ ~(set_of_edge u V E = {w:real^3})`)
11056 THENL[ MRESA_TAC CARD_SING[`w:real^3`; `(set_of_edge u V E):real^3->bool`]
11057 THEN POP_ASSUM MP_TAC
11058 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
11059 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN ARITH_TAC;
11060 MRESA_TAC exists_cut_rcone_fan_with_edge_run_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;`u:real^3`;`w:real^3`;`s:real`]
11061 THEN POP_ASSUM MP_TAC
11062 THEN ASM_REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;INTER;IN_ELIM_THM;]
11063 THEN STRIP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
11064 THEN DISCH_THEN(LABEL_TAC"OK") THEN DISCH_TAC
11065 THEN USE_THEN "OK" MP_TAC
11066 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[rw_dart_fan;]
11067 THEN ASM_REWRITE_TAC[INTER; w_dart_fan;wedge;IN_ELIM_THM;]
11068 THEN STRIP_TAC
11069 THEN EXISTS_TAC`t:real`
11070 THEN ASM_REWRITE_TAC[]
11071 THEN REPEAT STRIP_TAC
11072 THEN ABBREV_TAC`vt= (&1 - t':real) % u + t' % w :real^3`
11073 THEN ABBREV_TAC`a1=(v-x):real^3`
11074 THEN ABBREV_TAC`a2=vt-x:real^3`
11075 THEN ABBREV_TAC`a3=(y-x):real^3`
11076 THEN ABBREV_TAC`a4=(u-x) :real^3`
11077 THEN ABBREV_TAC`va=a1 cross a2:real^3`
11078 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
11079 THEN ABBREV_TAC`v3=(vb:real^3) cross (va:real^3)+(x:real^3)`
11080 THEN MP_TAC(REAL_ARITH`&0< t'/\ t'< t /\ t< &1==> ~(t'= &0) /\ t'< &1`) THEN RESA_TAC
11081 THEN MRESA_TAC in_aff_gt_1_2[`x:real^3`;`u:real^3`;`w:real^3 `;`t':real`]
11082 THEN MRESA_TAC aff_gt_inter_aff_gt [`(x:real^3)`;`(u:real^3)`;`(w:real^3)`]
11083 THEN MP_TAC(SET_RULE`aff_gt {x} {u, w} = aff_gt {x, u} {w} INTER aff_gt {x, w} {u}
11084 /\ vt IN aff_gt {x} {u, w:real^3} ==> vt IN aff_gt {x,u} {w}`) THEN RESA_TAC
11085 THEN MRESA_TAC aff_gt_imp_not_collinear[`x:real^3`;`w:real^3`;`u:real^3`; `vt:real^3`]
11086 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`]
11087 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
11088 THEN POP_ASSUM MP_TAC
11089 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
11090 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
11091 THEN ASM_REWRITE_TAC[DE_MORGAN_THM] THEN STRIP_TAC
11092 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`v:real^3`;`vt:real^3`;`w:real^3`;]
11093 THEN POP_ASSUM MP_TAC
11094 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
11095 THEN ASM_REWRITE_TAC[]
11096 THEN STRIP_TAC
11097 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
11098 THEN POP_ASSUM MP_TAC
11099 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;]
11100 THEN RESA_TAC
11101 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`v:real^3`;`vt:real^3`]
11102 THEN POP_ASSUM MP_TAC
11103 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;]
11104 THEN RESA_TAC
11105 THEN POP_ASSUM MP_TAC
11106 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
11107 THEN STRIP_TAC
11108 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`y:real^3`;`vt:real^3`;`w:real^3`;]
11109 THEN MP_TAC(REAL_ARITH`&0< azim x u w y /\ azim x u w y< azim x u w v /\ azim x u w v< pi==>
11110 azim x u w y<= azim x u w v/\ ~(azim x u w y = &0 \/ azim x u w y= pi)`) THEN RESA_TAC
11111 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`w:real^3`;`y:real^3`]
11112 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`y:real^3`;`w:real^3`]
11113 THEN POP_ASSUM MP_TAC
11114 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
11115 THEN ASM_REWRITE_TAC[DE_MORGAN_THM] THEN STRIP_TAC
11116 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`y:real^3`;`w:real^3`]
11117 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`y:real^3`;`vt:real^3`]
11118 THEN POP_ASSUM MP_TAC
11119 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
11120 THEN STRIP_TAC
11121 THEN MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
11122 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t':real`)
11123 THEN MRESA_TAC cut_in_angle_fan[`x:real^3`;`v:real^3`;`u:real^3`;`vt:real^3`;`y:real^3`]
11124 THEN POP_ASSUM MP_TAC
11125 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
11126 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
11127 THEN RESA_TAC
11128 THEN MRESA_TAC aff_gt_in_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`y:real^3`;`s:real`]
11129 THEN EXISTS_TAC`v3:real^3`
11130 THEN ASM_REWRITE_TAC[]
11131 THEN MATCH_MP_TAC(SET_RULE`aff_gt {x} {u, y} SUBSET rw_dart_fan x V E (x,u,w,v) (cos s)
11132 /\ v3 IN aff_gt {x} {u, y} ==> v3 IN rw_dart_fan x V E (x,u,w,v) (cos s)`)
11133 THEN ASM_REWRITE_TAC[]
11134 THEN MRESA_TAC cut_in_angle_fan[`x:real^3`;`y:real^3`;`v:real^3`;`u:real^3`;`vt:real^3`]
11135 THEN POP_ASSUM MP_TAC
11136 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
11137 THEN ASM_REWRITE_TAC[]
11138 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
11139 THEN ASM_REWRITE_TAC[CROSS_LNEG;CROSS_RNEG]
11140 THEN ONCE_REWRITE_TAC[GSYM CROSS_RNEG]
11141 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
11142 THEN RESA_TAC
11143 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11144 THEN POP_ASSUM  MATCH_MP_TAC 
11145 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`u:real^3`;`w:real^3`;`y:real^3`;`v:real^3`]
11146 THEN POP_ASSUM MP_TAC
11147 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
11148 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"NHO EM")
11149 THEN MP_TAC(REAL_ARITH`azim x u w y< azim x u w v/\ &0< azim x u w y/\ azim x u w v < pi /\ azim x u w v = azim x u w y + azim x u y v==>  ~(azim x u y (v:real^3)= &0 \/ azim x u y (v:real^3)= pi)`)
11150 THEN RESA_TAC
11151 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`y:real^3`;`v:real^3`]
11152 THEN POP_ASSUM MP_TAC
11153 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
11154 THEN RESA_TAC
11155 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
11156 THEN ASM_REWRITE_TAC[]
11157 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`u:real^3`;`v:real^3`;`y:real^3`]
11158 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
11159 THEN POP_ASSUM MP_TAC
11160 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
11161 THEN ASM_REWRITE_TAC[DE_MORGAN_THM] THEN STRIP_TAC
11162 THEN MP_TAC(REAL_ARITH`&0<=azim x v u y /\ ~(azim x v u y= &0)==> &0< azim x v u y`)
11163 THEN ASM_REWRITE_TAC[azim] THEN RESA_TAC
11164 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`vt:real^3`]
11165 THEN MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`vt:real^3`][DE_MORGAN_THM]
11166 THEN MP_TAC(REAL_ARITH`&0<=azim x v u vt /\ ~(azim x v u vt= &0)==> &0< azim x v u vt`)
11167 THEN ASM_REWRITE_TAC[azim] THEN RESA_TAC
11168 THEN MP_TAC(REAL_ARITH`&0<t==> ~(t= &0)`) THEN RESA_TAC
11169 THEN MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
11170 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
11171 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`(&1-t) %u+ t%w:real^3`]
11172 THEN MRESA_TAC aff_gt_inter_aff_gt [`(x:real^3)`;`(v:real^3)`;`((&1-t) %u+ t%w:real^3)`]
11173 THEN MP_TAC(SET_RULE`aff_gt {x} {v, (&1-t) %u+ t%w} = aff_gt {x, v} {(&1-t) %u+ t%w} INTER aff_gt {x, (&1-t) %u+ t%w} {v}
11174 /\ y IN aff_gt {x} {v, (&1-t) %u+ t%w:real^3} ==> y IN aff_gt {x,v} {(&1-t) %u+ t%w}`) THEN RESA_TAC
11175 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`;`(&1-t) %u+ t%w:real^3`;]
11176 THEN MRESA_TAC inequality4_aim_in_convex_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`t:real`]
11177 THEN MRESA_TAC angle_is_smallpi_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
11178 THEN MP_TAC(REAL_ARITH`azim x v u w< pi /\ azim x v u ((&1 - t) % u + t % w) < azim x v u w
11179 ==> azim x v u ((&1 - t) % u + t % w) < pi`) THEN RESA_TAC
11180 THEN ABBREV_TAC`vs= (&1 - t:real) % u + t % w :real^3`
11181 THEN MRESA_TAC in_aff_gt_1_2[`x:real^3`;`u:real^3`;`w:real^3 `;`t:real`]
11182 THEN MP_TAC(SET_RULE`aff_gt {x} {u, w} = aff_gt {x, u} {w} INTER aff_gt {x, w} {u}
11183 /\ vs IN aff_gt {x} {u, w:real^3} ==> vs IN aff_gt {x,u} {w}`) THEN RESA_TAC
11184 THEN MRESA1_TAC REAL_MUL_LINV`t:real`
11185 THEN MRESA1_TAC REAL_LT_INV`t:real`
11186 THEN MRESA_TAC REAL_LT_MUL[`inv t:real`;`t':real`]
11187 THEN MRESA_TAC REAL_LT_LMUL[`inv t:real`;`t':real`;`t:real`]
11188
11189 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`v:real^3`;`vs:real^3`;`w:real^3`;]
11190 THEN REMOVE_THEN"NHO EM" MP_TAC
11191 THEN DISCH_TAC THEN REMOVE_ASSUM_TAC
11192 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`v:real^3`;`vs:real^3`]
11193 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
11194 THEN MRESA_TAC inequality4_aim_in_convex_fan[`x:real^3`;`v:real^3`;`u:real^3`;`vs:real^3`;`inv (t) * t':real`]
11195 THEN POP_ASSUM MP_TAC
11196 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM(th)])
11197 THEN STRIP_TAC
11198 THEN MATCH_MP_TAC(SET_RULE`azim x v u ((&1 - inv t * t') % u + (inv t * t') % vs) < azim x v u vs /\
11199 (&1 - inv t * t') % u + (inv t * t') % vs = vt ==> azim x v u vt < azim x v u vs`)
11200 THEN ASM_REWRITE_TAC[]
11201 THEN EXPAND_TAC"vs"
11202 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - inv t * t') % u + (inv t * t') % ((&1 - t) % u + t % w)
11203 = (&1 - (inv t * t) * t') % u + ((inv t * t) *t') % w`;REAL_ARITH`&1* A=A`]]);;
11204
11205
11206
11207 let there_exists_component_contain_aff_gt_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
11208 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
11209 /\ sigma_fan x V E u w = v
11210 /\ fan80(x,V,E)
11211 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11212 ==>
11213  (?h:real. &0< h /\ (?y:real^3.
11214  aff_gt {x} {v, (&1-h)%u+h%w} SUBSET connected_component (yfan(x,V,E)) y ))`,
11215
11216 REPEAT STRIP_TAC
11217 THEN POP_ASSUM MP_TAC
11218 THEN POP_ASSUM MP_TAC
11219 THEN DISCH_THEN(LABEL_TAC "BE")
11220 THEN DISCH_THEN(LABEL_TAC"EM")
11221 THEN USE_THEN "BE" MP_TAC
11222 THEN REWRITE_TAC[fan80]
11223 THEN DISCH_TAC
11224 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
11225 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
11226 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
11227 ` (v:real^3)`]
11228 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
11229 ` (u:real^3)`]
11230 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `u:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
11231 THEN MRESA_TAC fan_run_in_small_is_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
11232 THEN POP_ASSUM(fun th-> MRESA1_TAC th `h/ &2`)
11233 THEN POP_ASSUM MP_TAC
11234 THEN MP_TAC(REAL_ARITH`&0< h==> ~(h/ &2 = &0)/\ &0< h/ &2 /\ h/ &2 < h`) THEN RESA_TAC
11235 THEN DISCH_TAC
11236 THEN EXISTS_TAC`h/ &2 :real`
11237 THEN ASM_REWRITE_TAC[]
11238 THEN EXISTS_TAC`&1/ &2 % v + &1/ &2 %((&1 - h / &2) % u + h / &2 % w:real^3)`
11239 THEN MATCH_MP_TAC CONNECTED_COMPONENT_MAXIMAL 
11240 THEN ASM_REWRITE_TAC[]
11241 THEN MRESA_TAC CONVEX_AFF_GT[`{x:real^3}`;`{v, (&1 - h / &2) % u + h / &2 % w:real^3}`]
11242 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`]
11243 THEN MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
11244 THEN POP_ASSUM (fun th-> MRESA1_TAC th `h/ &2:real`)
11245 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`(&1-h/ &2) %u+  h / &2 %w:real^3`]
11246 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - h/ &2) % (u:real^3) + h / &2 % (w:real^3)`;]
11247 THEN MRESAL_TAC in_aff_gt_1_2[`x:real^3`;`v:real^3`;`(&1 - h / &2) % u + h / &2 % w:real^3 `;`&1/ &2:real`]
11248 [REAL_ARITH`&1/ &2 < &1 /\ &0< &1/ &2 `; REAL_ARITH`&1 - &1/ &2 = &1/ &2` ]
11249 THEN MATCH_MP_TAC CONVEX_CONNECTED 
11250 THEN ASM_REWRITE_TAC[]);;
11251
11252
11253
11254 let CONNECTED_COMPONENT_OF_SUBSET = prove
11255  (`!s t x y. s SUBSET t /\ connected_component s x y
11256            ==> connected_component t x y`,
11257   REWRITE_TAC[connected_component] THEN SET_TAC[]);;
11258
11259 let connected_component_of_faces_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
11260 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
11261 /\ sigma_fan x V E u w = v
11262 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11263 /\ fan80(x,V,E)
11264 ==>
11265 dart_leads_into x V E v u = dart_leads_into x V E u w`,
11266 REPEAT STRIP_TAC
11267 THEN POP_ASSUM MP_TAC
11268 THEN POP_ASSUM MP_TAC
11269 THEN DISCH_THEN(LABEL_TAC "BE")
11270 THEN DISCH_THEN(LABEL_TAC"con")
11271 THEN USE_THEN "con" MP_TAC
11272 THEN REWRITE_TAC[fan80]
11273 THEN DISCH_TAC
11274 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
11275 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
11276 THEN MRESA_TAC exists_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`]
11277 THEN POP_ASSUM MP_TAC
11278 THEN DISCH_THEN (LABEL_TAC"ANH")
11279 THEN MRESA_TAC exists_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;` w:real^3`]
11280 THEN POP_ASSUM MP_TAC
11281 THEN DISCH_THEN (LABEL_TAC"YEU")
11282 THEN ABBREV_TAC`h00= min h' (pi/ &2) / &2 :real`
11283 THEN MP_TAC(REAL_ARITH`&0< h' /\ &0< pi /\ h00= min h' (pi/ &2) / &2 :real==> &0< h00 /\ h00 < pi / &2`)
11284 THEN REWRITE_TAC[PI_WORKS]
11285 THEN RESA_TAC
11286 THEN MRESA_TAC exists_rw_dart_inter_aff_gt1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`;`h00:real`]
11287 THEN POP_ASSUM MP_TAC
11288 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`]
11289 THEN DISCH_THEN (LABEL_TAC"EM")
11290 THEN MRESA_TAC exists_rw_dart_inter_aff_gt_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`]
11291 THEN POP_ASSUM MP_TAC
11292 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`]
11293 THEN DISCH_THEN (LABEL_TAC"NHIEU")
11294 THEN MRESA_TAC fan_run_in_small_is_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
11295 THEN POP_ASSUM MP_TAC
11296 THEN DISCH_THEN (LABEL_TAC"HA")
11297 THEN ABBREV_TAC`h1' = min h'' h''' / &2 :real`
11298 THEN ABBREV_TAC`h1= min h1' h'''' / &2 :real`
11299 THEN MP_TAC(REAL_ARITH`&0< h'' /\ &0 < h''' /\ h1'= min h'' h''' / &2 ==> &0< h1' /\ h1'< h'' /\ h1' < h'''`)
11300 THEN RESA_TAC
11301 THEN MP_TAC(REAL_ARITH`&0< h1'/\ h1'< h'' /\ h1' < h''' /\ &0 < h'''' /\ h1= min h1' h'''' / &2 ==> &0< h1 /\ h1< h'' /\ h1 < h''' /\ h1< h''''`)
11302 THEN RESA_TAC
11303 THEN ABBREV_TAC`h2= min h (pi/ &2) / &2 :real`
11304 THEN MP_TAC(REAL_ARITH`&0< h /\ &0< pi /\ h2= min h (pi/ &2) / &2 :real==> &0< h2 /\ h2 < pi / &2`)
11305 THEN REWRITE_TAC[PI_WORKS]
11306 THEN RESA_TAC
11307 THEN REMOVE_THEN "NHIEU" (fun th-> MRESAL1_TAC th `h1:real`[INTER;IN_ELIM_THM])
11308 THEN POP_ASSUM (fun th-> MRESA1_TAC th `h2:real`)
11309 THEN MP_TAC(REAL_ARITH`&0< h2 /\ h2= min h (pi/ &2) / &2 :real==>  h2 < h`)
11310 THEN RESA_TAC
11311 THEN USE_THEN "ANH" (fun th -> MP_TAC(ISPECL[`h2:real`;`y:real^3`]th))
11312 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
11313 THEN RESA_TAC
11314 THEN POP_ASSUM MP_TAC
11315 THEN DISCH_THEN (LABEL_TAC"LAM")
11316 THEN REMOVE_THEN "EM" (fun th-> MRESAL1_TAC th `h1:real`[INTER;IN_ELIM_THM])
11317 THEN MP_TAC(REAL_ARITH`&0< h00 /\ h00= min h' (pi/ &2) / &2 :real==>  h00 < h'`)
11318 THEN RESA_TAC
11319 THEN USE_THEN "YEU" (fun th -> MP_TAC(ISPECL[`h00:real`;`y':real^3`]th))
11320 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
11321 THEN RESA_TAC
11322 THEN SUBGOAL_THEN `U=U':real^3->bool` ASSUME_TAC
11323 THENL[
11324 REMOVE_THEN "LAM" (fun th-> REWRITE_TAC[SYM(th)])
11325 THEN POP_ASSUM  (fun th-> REWRITE_TAC[SYM(th)])
11326 THEN REWRITE_TAC[CONNECTED_COMPONENT_EQ_EQ]
11327 THEN MRESA_TAC CONVEX_AFF_GT[`{x:real^3}`;`{v, (&1 - h1) % u + h1  % w:real^3}`]
11328 THEN MRESA_TAC CONVEX_CONNECTED[`aff_gt {x} {v, (&1 - h1) % u + h1 % w}:real^3->bool`]
11329 THEN POP_ASSUM MP_TAC
11330 THEN REWRITE_TAC[CONNECTED_IFF_CONNECTED_COMPONENT]
11331 THEN DISCH_TAC
11332 THEN POP_ASSUM (fun th-> MRESA_TAC th [`y:real^3`;`y':real^3`])
11333 THEN REMOVE_THEN "HA" (fun th-> MRESA1_TAC th `h1:real`)
11334 THEN MRESA_TAC CONNECTED_COMPONENT_OF_SUBSET[`aff_gt {x} {v, (&1 - h1) % u + h1 % w:real^3}:real^3-> bool`;`yfan (x:real^3,(V:real^3->bool),(E:(real^3->bool)->bool)):real^3->bool`;`y:real^3`;`y':real^3`]
11335 THEN ASM_TAC THEN SET_TAC[];
11336 SUBGOAL_THEN`dart_leads_into x V E v u= U:real^3->bool` ASSUME_TAC
11337 THENL[
11338 REMOVE_ASSUM_TAC
11339 THEN MATCH_MP_TAC unique_dart_leads_into
11340 THEN ASM_REWRITE_TAC[]
11341 THEN EXISTS_TAC`h:real`
11342 THEN ASM_REWRITE_TAC[];
11343
11344 SUBGOAL_THEN`dart_leads_into x V E u w= U':real^3->bool` ASSUME_TAC
11345 THENL[ MATCH_MP_TAC unique_dart_leads_into
11346 THEN ASM_REWRITE_TAC[]
11347 THEN EXISTS_TAC`h':real`
11348 THEN ASM_REWRITE_TAC[];
11349 ASM_REWRITE_TAC[]]]]);;
11350
11351
11352
11353
11354 (************************)
11355
11356
11357
11358
11359
11360
11361
11362 let dart_leads_into1 = new_definition 
11363     `dart_leads_into1 (x,V,E) (v,u) = @s.  s IN topological_component_yfan (x,V,E) /\
11364         (?eps. (eps < &1) /\ 
11365            rw_dart_fan x V E (x,v,u,sigma_fan x V E v u) eps  SUBSET s)`;;
11366
11367
11368 let dartset_leads_into = new_definition
11369   `dartset_leads_into (x,V,E) ds = 
11370     @s. (!y. (y IN ds) ==> (s = dart_leads_into1 (x,V,E) y))`;;
11371
11372
11373
11374 let exists_dartset_leads_into_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
11375 FAN(x,V,E)
11376 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11377 /\ fan80(x,V,E)
11378 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11379 ==>
11380 ?s:real^3->bool. !y. y IN ds==> s= dart_leads_into x V E (pr2 y) (pr3 y)`,
11381
11382 REPEAT STRIP_TAC
11383 THEN POP_ASSUM MP_TAC
11384 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11385 THEN ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
11386 THEN STRIP_TAC
11387 THEN EXISTS_TAC`dart_leads_into x V E (pr2 x') (pr3 x'):real^3->bool`
11388 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM]
11389 THEN REPEAT STRIP_TAC
11390 THEN POP_ASSUM MP_TAC
11391 THEN POP_ASSUM MP_TAC
11392 THEN DISJ_CASES_TAC(SET_RULE`~(x' IN d1_fan (x,V,E) )\/ (x' IN d1_fan (x:real^3,V,E))`)
11393 THENL[MRESA_TAC id_power_enf_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`x':real^3#real^3#real^3#real^3` ;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11394 THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[];
11395 SPEC_TAC (`y:real^3#real^3#real^3#real^3`,`y:real^3#real^3#real^3#real^3`)
11396 THEN SPEC_TAC (`n:num`,`n:num`)
11397 THEN INDUCT_TAC
11398 THENL[
11399 REWRITE_TAC[POWER_0;I_THM]
11400 THEN SET_TAC[];
11401
11402 POP_ASSUM MP_TAC
11403 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11404 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3` )
11405 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11406 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3` )
11407 THEN ABBREV_TAC`y1=(f1_fan x V E POWER n) (x':real^3#real^3#real^3#real^3)`
11408 THEN DISCH_THEN(LABEL_TAC "EM")
11409 THEN ASM_REWRITE_TAC[COM_POWER;o_DEF]
11410 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`y1:real^3#real^3#real^3#real^3`[ARITH_RULE`(n:num)>= 0`])
11411 THEN REPEAT STRIP_TAC
11412 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`n:num`]
11413 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
11414 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3`; `y1:real^3#real^3#real^3#real^3`]
11415 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"EM") THEN REPEAT STRIP_TAC
11416 THEN ABBREV_TAC`u=pr2 (f1_fan x V E y1):real^3`
11417 THEN ABBREV_TAC`w=pr3 (f1_fan x V E y1):real^3`
11418 THEN ABBREV_TAC`v=sigma_fan x V E u w:real^3`
11419 THEN REMOVE_THEN "EM" MP_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
11420 THEN MRESA_TAC connected_component_of_faces_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`]]]);;
11421
11422
11423
11424
11425 let dartset_leads_into_fan = new_definition
11426   `dartset_leads_into_fan x V E ds = 
11427     @s. (!y. (y IN ds) ==> (s = dart_leads_into x V E (pr2 y) (pr3 y)))`;;
11428
11429
11430
11431 let DARTSET_LEADS_INTO_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
11432 FAN(x,V,E)
11433 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11434 /\ fan80(x,V,E)
11435 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11436 ==>
11437 (!y. y IN ds==> dartset_leads_into_fan x V E ds= dart_leads_into x V E (pr2 y) (pr3 y))`,
11438 REPEAT GEN_TAC THEN STRIP_TAC 
11439 THEN ONCE_REWRITE_TAC[dartset_leads_into_fan]
11440 THEN MRESA_TAC exists_dartset_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11441 `ds:real^3#real^3#real^3#real^3->bool`]
11442 THEN SELECT_ELIM_TAC 
11443 THEN EXISTS_TAC`s:real^3->bool`
11444  THEN ASM_REWRITE_TAC[]);;
11445
11446
11447
11448
11449
11450
11451
11452
11453 let UNIQUE_DARTSET_LEADS_INTO_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds s.
11454 FAN(x,V,E)
11455 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11456 /\ fan80(x,V,E)
11457 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11458 /\ (!y. y IN ds==> s= dart_leads_into x V E (pr2 y) (pr3 y))
11459 ==> dartset_leads_into_fan x V E ds= s`,
11460 REPEAT STRIP_TAC
11461 THEN POP_ASSUM MP_TAC
11462 THEN MRESA_TAC FACE_FAN_NOT_EMPTY[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11463 `ds:real^3#real^3#real^3#real^3->bool`]
11464 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`]
11465 THEN STRIP_TAC
11466 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11467 `ds:real^3#real^3#real^3#real^3->bool`]
11468 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
11469 THEN DISCH_TAC
11470 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`));;
11471
11472
11473
11474
11475 let equality_dart_leads_into=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y y1.
11476 FAN(x,V,E)
11477 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11478 /\ fan80(x,V,E)
11479 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11480 /\ y IN ds /\ y1 IN ds
11481
11482 ==>dart_leads_into x V E (pr2 y) (pr3 y)= dart_leads_into x V E (pr2 y1) (pr3 y1)`,
11483 REPEAT STRIP_TAC
11484 THEN MRESA_TAC exists_dartset_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11485 `ds:real^3#real^3#real^3#real^3->bool`]
11486 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3` THEN ASSUME_TAC(th))
11487 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y1:real^3#real^3#real^3#real^3`));;
11488
11489
11490 let UNIQUE_DARTSET_LEADS_INTO1_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds s y.
11491 FAN(x,V,E)
11492 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11493 /\ fan80(x,V,E)
11494 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11495 /\ y IN ds /\ s= dart_leads_into x V E (pr2 y) (pr3 y)
11496 ==> dartset_leads_into_fan x V E ds= s`,
11497 REPEAT STRIP_TAC
11498 THEN SUBGOAL_THEN`(!y. y IN ds==> s= dart_leads_into (x:real^3) V E (pr2 y) (pr3 y))` ASSUME_TAC
11499 THENL[REPEAT STRIP_TAC
11500 THEN MRESA_TAC equality_dart_leads_into[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11501 `ds:real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`;`y':real^3#real^3#real^3#real^3`];
11502 MRESA_TAC UNIQUE_DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11503 `ds:real^3#real^3#real^3#real^3->bool`;`s:real^3->bool`]]);;
11504
11505
11506 let exists_point_dart_leads_into_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
11507 FAN(x,V,E)
11508 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11509 /\ fan80(x,V,E)
11510 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11511 ==> ?y. y IN ds /\ dartset_leads_into_fan x V E ds =dart_leads_into x V E (pr2 y) (pr3 y)`,
11512
11513 REPEAT STRIP_TAC
11514 THEN MRESA_TAC FACE_FAN_NOT_EMPTY[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11515 `ds:real^3#real^3#real^3#real^3->bool`]
11516 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`]
11517 THEN STRIP_TAC
11518 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
11519 THEN ASM_REWRITE_TAC[]
11520 THEN MRESA_TAC UNIQUE_DARTSET_LEADS_INTO1_FAN [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11521 `ds:real^3#real^3#real^3#real^3->bool`;`(dart_leads_into x V E (pr2 y) (pr3 y)):real^3->bool`;`y:real^3#real^3#real^3#real^3`]);;
11522
11523
11524
11525
11526
11527
11528 let dartset_leads_into_is_topological_component_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
11529 FAN(x,V,E)
11530 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11531 /\ fan80(x,V,E)
11532 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11533 ==> dartset_leads_into_fan x V E ds IN topological_component_yfan (x,V,E)`,
11534 REPEAT STRIP_TAC
11535 THEN MRESA_TAC exists_point_dart_leads_into_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
11536 `ds:real^3#real^3#real^3#real^3->bool`;]
11537 THEN MRESA_TAC properties_of_elements_in_face_fully_surroundedfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
11538 THEN MRESA_TAC dart_leads_into_fan_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`pr2(y):real^3`; `pr3(y):real^3`]);;
11539
11540
11541 let dartset_leads_into_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds:real^3#real^3#real^3#real^3->bool.
11542 FAN(x,V,E)
11543 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11544 /\ fan80(x,V,E)
11545 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11546 ==>
11547 dartset_leads_into_fan x V E ds SUBSET yfan (x,V,E)`,
11548 REPEAT STRIP_TAC
11549 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
11550 THEN POP_ASSUM MP_TAC
11551 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
11552 THEN STRIP_TAC
11553 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_SUBSET]);;
11554
11555
11556
11557
11558 let RWXUYZZ=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds:real^3#real^3#real^3#real^3->bool.
11559 FAN(x,V,E)
11560 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11561 /\ fan80(x,V,E)
11562 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11563 ==>
11564 (?s:real^3->bool. !y. y IN ds==> s= dart_leads_into x V E (pr2 y) (pr3 y))
11565 /\ dartset_leads_into_fan x V E ds IN topological_component_yfan (x,V,E)`,
11566 MESON_TAC[dartset_leads_into_is_topological_component_yfan;exists_dartset_leads_into_fan]);;
11567
11568
11569
11570 (************DWWUTKW*********)
11571 let add_edge_graph_fan=prove(`!(V:A->bool) (E:(A->bool)->bool) v:A u:A.
11572  v IN V /\ u IN V /\ E1=E UNION {{v,u}} /\ UNIONS E SUBSET V==> UNIONS E1 SUBSET V`,
11573 REPEAT STRIP_TAC
11574 THEN POP_ASSUM MP_TAC
11575 THEN ASM_REWRITE_TAC[UNIONS; SUBSET; UNION; IN_ELIM_THM;IN_SING]
11576 THEN DISCH_THEN(LABEL_TAC "YEU")
11577 THEN REPEAT STRIP_TAC
11578 THENL[SUBGOAL_THEN`(?u. u IN E /\ x IN (u:A->bool))`ASSUME_TAC
11579 THENL[
11580 EXISTS_TAC`u':A->bool` THEN ASM_REWRITE_TAC[];
11581 REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `x:A`)];
11582 ASM_TAC THEN SET_TAC[]]);;
11583
11584
11585 let garph_add_edge_is_garph=prove(`!(V:A->bool) (E:(A->bool)->bool) v:A u:A.
11586  E1=E UNION {{v,u}} /\ ~(v=u) /\ graph E==> graph E1`,
11587 REPEAT STRIP_TAC
11588 THEN POP_ASSUM MP_TAC
11589 THEN ASM_REWRITE_TAC[GRAPH; UNION;IN_ELIM_THM;IN_SING]
11590 THEN DISCH_THEN(LABEL_TAC"YEU")
11591 THEN GEN_TAC THEN STRIP_TAC
11592 THENL[REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `e:A->bool`);
11593 ASM_REWRITE_TAC[HAS_SIZE] THEN STRIP_TAC
11594 THEN MRESA_TAC CARD_2_FAN[`v:A`;`u:A`]
11595 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
11596                  IN_INSERT; NOT_IN_EMPTY]]);;
11597
11598 let add_edge_into_collinear_fan=prove(`!x:real^3 (E:(real^3->bool)->bool) v:real^3 u:real^3.
11599 ~collinear {x,v,u} /\
11600 (!e. e IN E ==> ~collinear ({x} UNION e))
11601 ==>
11602 (!e. e IN E UNION {{v, u}} ==> ~collinear ({x} UNION e))`,
11603 REPEAT STRIP_TAC
11604 THEN POP_ASSUM MP_TAC
11605 THEN POP_ASSUM MP_TAC
11606 THEN ASM_REWRITE_TAC[]
11607 THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV)[UNION;]
11608 THEN REWRITE_TAC[IN_ELIM_THM;IN_SING]
11609 THEN POP_ASSUM MP_TAC THEN DISCH_THEN (LABEL_TAC"YEU")
11610 THEN STRIP_TAC
11611 THENL[REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th `e:real^3->bool`);
11612 ASM_REWRITE_TAC[SET_RULE`{X} UNION {A,B}={X,A,B}`]]);;
11613
11614
11615 let condition_not_edge_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 ds.
11616 FAN(x,V,E) /\ v IN V /\ u IN V /\ ~collinear {x,v,u}
11617 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11618 /\ fan80(x,V,E)
11619 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11620 /\ e1 IN E /\ e2 = {v, u}
11621 /\ aff_gt {x} {v,u} SUBSET dartset_leads_into_fan x V E ds
11622 ==> ~(e1=e2)`,
11623
11624
11625 REPEAT STRIP_TAC
11626 THEN POP_ASSUM MP_TAC
11627 THEN ASM_REWRITE_TAC[]
11628 THEN POP_ASSUM MP_TAC
11629 THEN DISCH_THEN(LABEL_TAC"YEU")
11630 THEN STRIP_TAC
11631 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (u:real^3)`]
11632 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` ds:real^3#real^3#real^3#real^3->bool`]
11633 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E ds SUBSET yfan (x,V,E)/\ aff_gt {x} {v, u} SUBSET dartset_leads_into_fan x V E ds==> aff_gt {x} {v, u} SUBSET yfan (x:real^3,V,E)`)
11634 THEN RESA_TAC
11635 THEN POP_ASSUM MP_TAC
11636 THEN REWRITE_TAC[yfan; SET_RULE`A SUBSET (:real^3) DIFF B <=> A INTER B={}`;]
11637 THEN DISCH_TAC
11638 THEN SUBGOAL_THEN`aff_ge {x} e1 SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
11639 THENL[REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
11640 THEN REPEAT STRIP_TAC
11641 THEN EXISTS_TAC `e1:real^3->bool`
11642 THEN ASM_REWRITE_TAC[]
11643 THEN FIND_ASSUM MP_TAC(`(e1:real^3->bool) IN E`)
11644 THEN REWRITE_TAC[IN]
11645 THEN ASM_REWRITE_TAC[];
11646 ASSUME_TAC(SET_RULE`aff_gt {x} {v, u} INTER
11647       (aff_gt {x} {v, u} UNION aff_ge {x} {v} UNION aff_ge {x} {u})
11648 =aff_gt {x} {v, u} `)
11649 THEN MP_TAC(SET_RULE`aff_gt {x:real^3} {v, u} INTER xfan (x,V:real^3->bool,E) = {}/\aff_ge {x} e1 SUBSET xfan (x,V,E)
11650 ==> aff_gt {x} {v, u} INTER aff_ge {x} e1={}`)
11651 THEN RESA_TAC
11652 THEN POP_ASSUM MP_TAC 
11653 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`]
11654 THEN MATCH_MP_TAC exists_in_aff_gt
11655 THEN ASM_REWRITE_TAC[]]);;
11656
11657
11658 let properties_edges_eq_fan=prove(`!e:A-> bool v:A u:A.
11659 FINITE e /\ ~(e={v,u}) /\ ~(v=u)  /\ CARD e=2  ==>  ~(v IN e)\/ ~(u IN e)`,
11660 REPEAT GEN_TAC THEN STRIP_TAC
11661 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC "YEU")
11662 THEN ONCE_REWRITE_TAC[SET_RULE`~A \/ ~B<=> ~(A/\B)`]
11663 THEN STRIP_TAC
11664 THEN MP_TAC(SET_RULE`v IN e /\ u IN e ==> {v:A,u} SUBSET e`)
11665 THEN RESA_TAC
11666 THEN MRESA_TAC CARD_2_FAN[`v:A`;`u:A`]
11667 THEN REMOVE_THEN "YEU" MP_TAC
11668 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
11669 THEN STRIP_TAC
11670 THEN MRESA_TAC CARD_SUBSET_EQ[`{v,u:A}`;`e:A->bool`]);;
11671
11672
11673 let condition_not_intersection_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 ds e1:real^3->bool e2:real^3->bool.
11674 FAN(x,V,E) /\ v IN V /\ u IN V /\ ~collinear {x,v,u}
11675 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11676 /\ fan80(x,V,E)
11677 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11678 /\ aff_gt {x} {v,u} SUBSET dartset_leads_into_fan x V E ds
11679 /\ e1 IN E /\ e2 = {v, u}
11680 ==>aff_ge {x} e1 INTER aff_ge {x} e2 = aff_ge {x} (e1 INTER e2)`,
11681 REPEAT STRIP_TAC
11682 THEN ASM_REWRITE_TAC[]
11683 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (u:real^3)`]
11684 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` ds:real^3#real^3#real^3#real^3->bool`]
11685 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E ds SUBSET yfan (x,V,E)/\ aff_gt {x} {v, u} SUBSET dartset_leads_into_fan x V E ds==> aff_gt {x} {v, u} SUBSET yfan (x:real^3,V,E)`)
11686 THEN RESA_TAC
11687 THEN POP_ASSUM MP_TAC
11688 THEN REWRITE_TAC[yfan; SET_RULE`A SUBSET (:real^3) DIFF B <=> A INTER B={}`;]
11689 THEN DISCH_TAC
11690 THEN SUBGOAL_THEN`aff_ge {x} e1 SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
11691 THENL[
11692 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
11693 THEN REPEAT STRIP_TAC
11694 THEN EXISTS_TAC `e1:real^3->bool`
11695 THEN ASM_REWRITE_TAC[]
11696 THEN ASM_TAC THEN SET_TAC[IN];
11697 MP_TAC(SET_RULE`aff_gt {x:real^3} {v, u} INTER xfan (x,V:real^3->bool,E) = {}/\aff_ge {x} e1 SUBSET xfan (x,V,E)
11698 ==> aff_gt {x} {v, u} INTER aff_ge {x} e1={}`)
11699 THEN RESA_TAC
11700 THEN MP_TAC(SET_RULE`
11701 aff_gt {x:real^3} {v, u} INTER aff_ge {x} e1={}==>
11702 aff_ge {x} e1 INTER (aff_gt {x} {v, u} UNION aff_ge {x} {v} UNION aff_ge {x} {u})
11703 = (aff_ge {x} e1 INTER aff_ge {x} {v}) UNION (aff_ge {x} e1 INTER aff_ge {x} {u})`)
11704 THEN RESA_TAC
11705 THEN MP_TAC(SET_RULE`e1 IN E==> e1 IN E UNION {{v:real^3} | v IN V}`)
11706 THEN RESA_TAC
11707 THEN MP_TAC(SET_RULE`v:real^3 IN V==> {v} IN E UNION {{v} | v IN V}`)
11708 THEN RESA_TAC
11709 THEN MP_TAC(SET_RULE`u:real^3 IN V==> {u} IN E UNION {{v} | v IN V}`)
11710 THEN RESA_TAC
11711 THEN FIND_ASSUM MP_TAC(`FAN(x:real^3,V,E)`)
11712 THEN REWRITE_TAC[FAN;fan7]
11713 THEN STRIP_TAC
11714 THEN POP_ASSUM(fun th-> MRESA_TAC th [`e1:real^3->bool`;`{v:real^3}`]THEN ASSUME_TAC th)
11715 THEN POP_ASSUM(fun th-> MRESA_TAC th [`e1:real^3->bool`;`{u:real^3}`])
11716 THEN MRESA_TAC condition_not_edge_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`ds:real^3#real^3#real^3#real^3->bool`]
11717 THEN FIND_ASSUM MP_TAC (`graph (E:(real^3->bool)->bool)`)
11718 THEN REWRITE_TAC[GRAPH]
11719 THEN STRIP_TAC
11720 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `e1:real^3->bool`[HAS_SIZE])
11721 THEN MRESA_TAC th3[`v:real^3`;`u:real^3`;`x:real^3`]
11722 THEN POP_ASSUM MP_TAC
11723 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={C,A,B}`]
11724 THEN RESA_TAC
11725 THEN MRESA_TAC properties_edges_eq_fan[`e1:real^3->bool`; `v:real^3`;`u:real^3`]
11726 THENL[MP_TAC(SET_RULE`~(v IN e1)==> e1 INTER {v:real^3}={} /\ e1 INTER {v, u}=e1 INTER {u}`)
11727 THEN RESA_TAC
11728 THEN ASSUME_TAC(SET_RULE`{} SUBSET e1 INTER {u}:real^3->bool`)
11729 THEN MP_TAC(SET_RULE`DISJOINT {v, u} {x:real^3}==> DISJOINT {x} (e1 INTER {u})`)
11730 THEN RESA_TAC
11731 THEN MRESA_TAC AFF_GE_MONO_RIGHT[`{x:real^3}`;`{}:real^3->bool`;`e1 INTER {u}:real^3->bool`]
11732 THEN POP_ASSUM MP_TAC THEN SET_TAC[];
11733 MP_TAC(SET_RULE`~(u IN e1)==> e1 INTER {u:real^3}={} /\ e1 INTER {v, u}=e1 INTER {v}`)
11734 THEN RESA_TAC
11735 THEN ASSUME_TAC(SET_RULE`{} SUBSET e1 INTER {v}:real^3->bool`)
11736 THEN MP_TAC(SET_RULE`DISJOINT {v, u} {x:real^3}==> DISJOINT {x} (e1 INTER {v})`)
11737 THEN RESA_TAC
11738 THEN MRESA_TAC AFF_GE_MONO_RIGHT[`{x:real^3}`;`{}:real^3->bool`;`e1 INTER {v}:real^3->bool`]
11739 THEN POP_ASSUM MP_TAC THEN SET_TAC[]]]);;
11740
11741
11742 let exists_edge_fully_surround_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) w:real^3.
11743 FAN(x,V,E) /\ w IN V
11744 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11745 ==> ?v. {w,v} IN E /\ v IN V`,
11746 REPEAT STRIP_TAC
11747 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)
11748 THEN SUBGOAL_THEN`~(set_of_edge (w:real^3) V E={})`ASSUME_TAC
11749 THENL[ POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC "YEU") THEN STRIP_TAC THEN REMOVE_THEN "YEU" MP_TAC
11750 THEN ASM_REWRITE_TAC[CARD_CLAUSES] THEN ARITH_TAC;
11751 POP_ASSUM MP_TAC 
11752 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?v. v IN A`; set_of_edge;IN_ELIM_THM]]);;
11753
11754
11755
11756
11757 let condition_not_intersection_point_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 ds:real^3#real^3#real^3#real^3->bool e1:real^3->bool w:real^3.
11758 FAN(x,V,E) /\ v IN V /\ u IN V /\ ~collinear {x,v,u}
11759 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11760 /\ fan80(x,V,E)
11761 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11762 /\ aff_gt {x} {v,u} SUBSET dartset_leads_into_fan x V E ds
11763 /\ w IN V /\ e1 = {v, u}
11764 ==>aff_ge {x} e1 INTER aff_ge {x} {w} = aff_ge {x} (e1 INTER {w})`,
11765 REPEAT STRIP_TAC
11766 THEN ASM_REWRITE_TAC[]
11767 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (u:real^3)`]
11768 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` ds:real^3#real^3#real^3#real^3->bool`]
11769 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E ds SUBSET yfan (x,V,E)/\ aff_gt {x} {v, u} SUBSET dartset_leads_into_fan x V E ds==> aff_gt {x} {v, u} SUBSET yfan (x:real^3,V,E)`)
11770 THEN RESA_TAC
11771 THEN POP_ASSUM MP_TAC
11772 THEN REWRITE_TAC[yfan; SET_RULE`A SUBSET (:real^3) DIFF B <=> A INTER B={}`;]
11773 THEN DISCH_TAC
11774 THEN SUBGOAL_THEN`aff_ge {x} {w} SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
11775 THENL[
11776 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
11777 THEN REPEAT STRIP_TAC
11778 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` w:real^3`]
11779 THEN EXISTS_TAC `{w,v'}:real^3->bool`
11780 THEN ASM_REWRITE_TAC[]
11781 THEN REMOVE_ASSUM_TAC
11782 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
11783 ` (w:real^3)`]
11784 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(w:real^3)`;` (v':real^3)`]
11785 THEN ASM_TAC THEN SET_TAC[IN];
11786 MP_TAC(SET_RULE`aff_gt {x:real^3} {v, u} INTER xfan (x,V:real^3->bool,E) = {}/\aff_ge {x} {w} SUBSET xfan (x,V,E)
11787 ==> aff_gt {x} {v, u} INTER aff_ge {x} {w}={}`)
11788 THEN RESA_TAC
11789 THEN MP_TAC(SET_RULE`
11790 aff_gt {x:real^3} {v, u} INTER aff_ge {x} {w}={}==>
11791 (aff_gt {x} {v, u} UNION aff_ge {x} {v} UNION aff_ge {x} {u}) INTER aff_ge {x} {w} 
11792 = (aff_ge {x} {w} INTER aff_ge {x} {v}) UNION (aff_ge {x} {w} INTER aff_ge {x} {u})`)
11793 THEN RESA_TAC
11794 THEN MP_TAC(SET_RULE`w IN V==> {w} IN E UNION {{v:real^3} | v IN V}`)
11795 THEN RESA_TAC
11796 THEN MP_TAC(SET_RULE`v:real^3 IN V==> {v} IN E UNION {{v} | v IN V}`)
11797 THEN RESA_TAC
11798 THEN MP_TAC(SET_RULE`u:real^3 IN V==> {u} IN E UNION {{v} | v IN V}`)
11799 THEN RESA_TAC
11800 THEN FIND_ASSUM MP_TAC(`FAN(x:real^3,V,E)`)
11801 THEN REWRITE_TAC[FAN;fan7]
11802 THEN STRIP_TAC
11803 THEN POP_ASSUM(fun th-> MRESA_TAC th [`{w}:real^3->bool`;`{v:real^3}`]THEN ASSUME_TAC th)
11804 THEN POP_ASSUM(fun th-> MRESA_TAC th [`{w}:real^3->bool`;`{u:real^3}`])
11805 THEN MRESA_TAC th3[`v:real^3`;`u:real^3`;`x:real^3`]
11806 THEN POP_ASSUM MP_TAC
11807 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={C,A,B}`]
11808 THEN RESA_TAC
11809 THEN MP_TAC(SET_RULE`~(v=u:real^3)==> ({v, u} INTER {w}= {w} INTER {v} /\ {w} INTER {u}={}) \/ ({v, u} INTER {w}= {w} INTER {u} /\ {w} INTER {v}={})`)
11810 THEN RESA_TAC
11811 THENL[ ASSUME_TAC(SET_RULE`{} SUBSET {w} INTER {v}:real^3->bool`)
11812 THEN MP_TAC(SET_RULE`DISJOINT {v, u} {x:real^3}==> DISJOINT {x} ({w} INTER {v})`)
11813 THEN RESA_TAC
11814 THEN MRESA_TAC AFF_GE_MONO_RIGHT[`{x:real^3}`;`{}:real^3->bool`;`{w} INTER {v}:real^3->bool`]
11815 THEN POP_ASSUM MP_TAC THEN SET_TAC[];
11816 ASSUME_TAC(SET_RULE`{} SUBSET {w} INTER {u}:real^3->bool`)
11817 THEN MP_TAC(SET_RULE`DISJOINT {v, u} {x:real^3}==> DISJOINT {x} ({w} INTER {u})`)
11818 THEN RESA_TAC
11819 THEN MRESA_TAC AFF_GE_MONO_RIGHT[`{x:real^3}`;`{}:real^3->bool`;`{w} INTER {u}:real^3->bool`]
11820 THEN POP_ASSUM MP_TAC THEN SET_TAC[]]]);;
11821
11822
11823
11824 let DWWUTKW=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 ds.
11825 FAN(x,V,E) /\ v IN V /\ u IN V /\ ~collinear {x,v,u}
11826 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
11827 /\ fan80(x,V,E)
11828 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
11829 /\ aff_gt {x} {v,u} SUBSET dartset_leads_into_fan x V E ds
11830 /\ E1=E UNION {{v,u}}
11831 ==> FAN (x,V,E1)`,
11832 REPEAT STRIP_TAC
11833 THEN FIND_ASSUM MP_TAC`FAN(x:real^3,V,E)`
11834 THEN REWRITE_TAC[FAN;fan1;fan2;fan6;fan7]
11835 THEN STRIP_TAC
11836 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
11837 THEN MRESA_TAC th3[`v:real^3`;`u:real^3`;`x:real^3`]
11838 THEN POP_ASSUM MP_TAC
11839 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={C,A,B}`]
11840 THEN RESA_TAC
11841 THEN MRESA_TAC add_edge_graph_fan[`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
11842 THEN MRESA_TAC garph_add_edge_is_garph[`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
11843 THEN MRESA_TAC add_edge_into_collinear_fan[`x:real^3`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
11844 THEN REWRITE_TAC[UNION;IN_ELIM_THM;IN_SING]
11845 THEN REPEAT GEN_TAC
11846 THEN STRIP_TAC
11847 THENL[ REMOVE_THEN"YEU" (fun th-> MRESA_TAC th[`e1:real^3->bool`;`e2:real^3->bool`])
11848 THEN POP_ASSUM MATCH_MP_TAC
11849 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[];
11850
11851 MRESA_TAC condition_not_intersection_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `ds:real^3#real^3#real^3#real^3->bool`;`e1:real^3->bool`;`e2:real^3->bool`];
11852
11853 REMOVE_THEN"YEU" (fun th-> MRESA_TAC th[`e1:real^3->bool`;`e2:real^3->bool`])
11854 THEN POP_ASSUM MATCH_MP_TAC
11855 THEN POP_ASSUM MP_TAC
11856 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[];
11857
11858 MRESA_TAC condition_not_intersection_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `ds:real^3#real^3#real^3#real^3->bool`;`e2:real^3->bool`;`e1:real^3->bool`]
11859 THEN ASM_REWRITE_TAC[SET_RULE`A INTER B= B INTER A`];
11860
11861 ASM_REWRITE_TAC[SET_RULE`A INTER A=A`];
11862
11863 MRESA_TAC condition_not_intersection_point_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `ds:real^3#real^3#real^3#real^3->bool`;`e1:real^3->bool`;`v':real^3`];
11864
11865 REMOVE_THEN"YEU" (fun th-> MRESA_TAC th[`e2:real^3->bool`;`e1:real^3->bool`])
11866 THEN ASM_REWRITE_TAC[SET_RULE`A INTER B=B INTER A`]
11867 THEN POP_ASSUM MATCH_MP_TAC
11868 THEN POP_ASSUM MP_TAC
11869 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[];
11870
11871 MRESA_TAC condition_not_intersection_point_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `ds:real^3#real^3#real^3#real^3->bool`;`e2:real^3->bool`;`v':real^3`]
11872 THEN ASM_REWRITE_TAC[SET_RULE`A INTER B=B INTER A`];
11873
11874 REMOVE_THEN"YEU" (fun th-> MRESA_TAC th[`e1:real^3->bool`;`e2:real^3->bool`])
11875 THEN POP_ASSUM MATCH_MP_TAC
11876 THEN POP_ASSUM MP_TAC
11877 THEN POP_ASSUM MP_TAC
11878 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[]]);;
11879
11880
11881
11882
11883 (**************JUTSTKG*******************)
11884
11885
11886 let exists_point_in_component_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool.
11887 U IN topological_component_yfan (x,V,E)
11888 ==> ?z. z IN U`,
11889 REPEAT STRIP_TAC
11890 THEN POP_ASSUM MP_TAC
11891 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
11892 THEN STRIP_TAC
11893 THEN EXISTS_TAC`y:real^3`
11894 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_SET;IN_ELIM_THM]
11895 THEN EXISTS_TAC`{y:real^3}`
11896 THEN ASM_REWRITE_TAC[CONNECTED_SING;IN_SING]
11897 THEN ASM_TAC THEN SET_TAC[]);;
11898
11899
11900
11901
11902 let nonsetedge_fully_surround_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
11903 (!v. v IN V==>CARD (set_of_edge v V E) >1)/\ FAN(x,V,E)
11904 ==> ~(E={})`,
11905 REPEAT STRIP_TAC
11906 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[]
11907 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[FAN;fan1]  THEN STRIP_TAC THEN ASSUME_TAC(th))
11908 THEN FIND_ASSUM MP_TAC(`~((V:real^3->bool) SUBSET {})`)
11909 THEN REWRITE_TAC[SET_RULE`~(V SUBSET {})<=> ?w. w IN V`]
11910 THEN STRIP_TAC
11911 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
11912 THEN ASM_TAC THEN SET_TAC[]);;
11913
11914
11915
11916
11917
11918 let exists_point_notx_in_xfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
11919 FAN(x,V,E) /\ ~(E={})
11920 ==> ?v. v IN xfan(x,V,E) /\ ~(v=x)`,
11921 REPEAT STRIP_TAC
11922 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[]
11923 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;xfan;IN_ELIM_THM]
11924 THEN STRIP_TAC
11925 THEN POP_ASSUM MP_TAC
11926 THEN DISCH_THEN (LABEL_TAC"YEU")
11927 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3->bool)`]
11928 THEN REMOVE_THEN "YEU" MP_TAC
11929 THEN RESA_TAC
11930 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
11931 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
11932 THEN EXISTS_TAC `v:real^3`
11933 THEN ASM_REWRITE_TAC[]
11934 THEN EXISTS_TAC `y:real^3->bool`
11935 THEN ASM_REWRITE_TAC[]
11936 THEN ASM_TAC THEN SET_TAC[]);;
11937
11938
11939
11940 let x_in_xfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
11941 FAN(x,V,E) /\ ~(E={})
11942 ==> x IN xfan(x,V,E)`,
11943 REPEAT STRIP_TAC
11944 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[]
11945 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;xfan;IN_ELIM_THM]
11946 THEN STRIP_TAC
11947 THEN EXISTS_TAC `y:real^3->bool`
11948 THEN POP_ASSUM MP_TAC
11949 THEN DISCH_THEN (LABEL_TAC"YEU")
11950 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3->bool)`]
11951 THEN REMOVE_THEN "YEU" MP_TAC
11952 THEN RESA_TAC
11953 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
11954 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
11955 THEN ASM_TAC THEN SET_TAC[]);;
11956
11957
11958
11959 let xfan_notempty_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
11960 FAN(x,V,E) /\ ~(E={})
11961 ==> ~(xfan(x,V,E)={})`,
11962 REPEAT STRIP_TAC
11963 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[]
11964 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`]
11965 THEN EXISTS_TAC `x:real^3`
11966 THEN ASM_TAC
11967 THEN SET_TAC[x_in_xfan]);;
11968
11969
11970
11971
11972
11973
11974
11975
11976 let xfan_closed_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
11977 FAN(x,V,E) 
11978 ==> closed (xfan(x,V,E))`,
11979
11980 REPEAT STRIP_TAC
11981 THEN REWRITE_TAC[xfan;SET_RULE`{v | ?e. E e /\ v IN aff_ge {x} e}= UNIONS{y | ?x'. x' IN E /\ y = aff_ge {x} x'}`]
11982 THEN MATCH_MP_TAC CLOSED_UNIONS 
11983 THEN MRESA_TAC set_edges_is_finite_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
11984 THEN MRESAL_TAC FINITE_IMAGE[`(\e:real^3->bool. aff_ge {x:real^3} e)`;`E:(real^3->bool)->bool`][IMAGE;IN_ELIM_THM]
11985 THEN REPEAT STRIP_TAC
11986 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU") THEN DISCH_TAC
11987 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(x':real^3->bool)`]
11988 THEN REMOVE_THEN "YEU"MP_TAC THEN RESA_TAC
11989 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
11990 THEN MRESA_TAC closed_aff_ge_1_2[`x:real^3`;`v:real^3`;`w:real^3`]);;
11991
11992
11993 let topological_component_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool.
11994 U IN topological_component_yfan (x,V,E)
11995 ==> U SUBSET yfan(x,V,E)`,
11996 REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
11997 THEN REPEAT STRIP_TAC
11998 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_SUBSET]);;
11999
12000
12001
12002
12003
12004
12005
12006
12007
12008 let aff_gt_connect_bound_not_inter_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 y:real^3 z:real^3.
12009 FAN(x,V,E)/\ {v,u} IN E /\ DISJOINT {x} {y,z}
12010 /\ (!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
12011 ==>
12012 aff_gt {x} {y,z} INTER aff_ge {x} {v,u}={}`,
12013
12014 REWRITE_TAC[SET_RULE`A={}<=> ~(?w. w IN A)`;INTER;IN_ELIM_THM]
12015 THEN REPEAT STRIP_TAC
12016 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
12017 THEN REPEAT STRIP_TAC
12018 THEN MRESA_TAC scale_in_edges_fan[`x:real^3`;`y:real^3`;`z:real^3`;`w:real^3`]
12019 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
12020 ` (v:real^3)`]
12021 THEN MP_TAC(REAL_ARITH`&0<a==> &0 <= a`) THEN RESA_TAC
12022 THEN MRESA_TAC scale_aff_ge_fan[`x:real^3`;`v:real^3`;`u:real^3`]
12023 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`w:real^3`;`a:real`][VECTOR_ARITH`(A+B-C)+C=A+B:real^3`])
12024 THEN MRESA_TAC in_aff_gt_1_2[`x:real^3`;`y:real^3`;`z:real^3 `;`t:real`]
12025 THEN REMOVE_THEN "YEU" (fun th-> MRESAL1_TAC th`t:real`[yfan])
12026 THEN POP_ASSUM MP_TAC
12027 THEN ASM_REWRITE_TAC[SET_RULE`~((&1 - t) % y + t % z IN (:real^3) DIFF xfan (x,V,E))<=>(&1 - t) % y + t % z IN xfan (x,V,E)`;xfan;IN_ELIM_THM]
12028 THEN EXISTS_TAC`{v,u}:real^3->bool`
12029 THEN ASM_REWRITE_TAC[]
12030 THEN ASM_TAC THEN SET_TAC[IN]);;
12031
12032
12033
12034
12035
12036
12037
12038
12039 let aff_gt_connect_bound_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y:real^3 z:real^3.
12040 FAN(x,V,E) /\ DISJOINT {x} {y,z} 
12041 /\ (!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
12042 ==> aff_gt {x} {y,z} SUBSET yfan (x,V,E)`,
12043
12044 REPEAT STRIP_TAC
12045 THEN
12046 REWRITE_TAC[yfan;xfan;SET_RULE`aff_gt {x} {y, z} SUBSET
12047          (:real^3) DIFF {v | ?e. E e /\ v IN aff_ge {x} e}
12048 <=> (!e. e IN E ==> aff_gt {x} {y,z} INTER aff_ge {x} e={})`]
12049 THEN REPEAT STRIP_TAC
12050 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
12051 THEN MRESA_TAC aff_gt_connect_bound_not_inter_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` w:real^3`;`y:real^3`;`z:real^3`]
12052 THEN POP_ASSUM MATCH_MP_TAC
12053 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM(th)] ));;
12054
12055
12056 let sym_line1_fan=prove(`!x y z:real^N. x IN aff {y, z} /\ ~(x=y)
12057 ==> z IN aff {x,y}`,
12058 REPEAT GEN_TAC
12059 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
12060 THEN STRIP_TAC
12061 THEN ASM_TAC
12062 THEN DISJ_CASES_TAC(REAL_ARITH`(v= &0)\/ ~(v= &0)`)
12063 THENL[ ASM_REWRITE_TAC[]
12064 THEN REDUCE_ARITH_TAC
12065 THEN RESA_TAC
12066 THEN REDUCE_VECTOR_TAC
12067 THEN RESA_TAC
12068 THEN SET_TAC[];
12069 MP_TAC(ISPEC`(v:real)`REAL_MUL_LINV)
12070 THEN RESA_TAC
12071 THEN REPEAT STRIP_TAC
12072 THEN EXISTS_TAC`inv(v:real)`
12073 THEN EXISTS_TAC`-- inv(v:real) *u`
12074 THEN ASM_REWRITE_TAC[REAL_ARITH` inv v + --inv v * u = inv v * (v+ &1- (u+v)) `;REAL_ARITH`A+ &1 - &1= A`;VECTOR_ARITH`inv v % (u % y + v % z) + (--inv v * u) % y=(inv v * v) % z `]
12075 THEN REDUCE_VECTOR_TAC]);;
12076
12077
12078
12079 let POINT_IN_LINE=prove(`!x y:real^N. x IN  aff {x,y}`,
12080 REPEAT GEN_TAC
12081 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
12082 THEN EXISTS_TAC`&1`
12083 THEN EXISTS_TAC`&0`
12084 THEN REDUCE_VECTOR_TAC
12085 THEN REAL_ARITH_TAC);;
12086
12087 let POINT_IN_LINE1=prove(`!x y:real^N. y IN  aff {x,y}`,
12088 REPEAT GEN_TAC
12089 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
12090 THEN EXISTS_TAC`&0`
12091 THEN EXISTS_TAC`&1`
12092 THEN REDUCE_VECTOR_TAC
12093 THEN REAL_ARITH_TAC);;
12094
12095
12096 let AFFINE_HULL_AFFINE_EQ =prove(`!s:real^N->bool. affine hull (affine hull s)= affine  hull s`,
12097 STRIP_TAC THEN MATCH_MP_TAC AFFINE_HULLS_EQ 
12098 THEN ASSUME_TAC(ISPEC `s:real^N->bool` AFFINE_AFFINE_HULL)
12099 THEN MRESA1_TAC AFFINE_HULL_EQ`affine hull s:real^N->bool`
12100 THEN MRESA_TAC HULL_SUBSET[`affine:(real^N->bool)->bool`;` s:real^N->bool`;]
12101 THEN SET_TAC[]);;
12102
12103 let sym_line0_fan=prove( `!x y z:real^N. x IN aff {y, z} /\ DISJOINT {x} {y,z}
12104 ==> aff {x,z} SUBSET aff {x,y}`,
12105 REPEAT GEN_TAC
12106 THEN STRIP_TAC
12107 THEN MP_TAC(SET_RULE`DISJOINT {x} {y,z}==> ~(x=y:real^N)`)
12108 THEN RESA_TAC
12109 THEN MRESA_TAC sym_line1_fan[`x:real^N`;`y:real^N`;`z:real^N`]
12110 THEN MP_TAC(SET_RULE`x IN aff {x, y} /\ z IN aff {x, y} ==> {x, z:real^N} SUBSET aff {x, y}`)
12111 THEN REWRITE_TAC[POINT_IN_LINE;]
12112 THEN RESA_TAC
12113 THEN MRESA_TAC HULL_MONO[`affine:(real^N->bool)->bool`;` {x, z:real^N}`;`aff {x, y:real^N}`]
12114 THEN POP_ASSUM MP_TAC
12115 THEN REWRITE_TAC[aff;AFFINE_HULL_AFFINE_EQ ]);;
12116
12117
12118 let sym_line_fan=prove(`!x y z:real^N. x IN aff {y, z} /\ DISJOINT {x} {y,z}
12119 ==> aff {x,z} = aff {x,y}`,
12120 REPEAT STRIP_TAC
12121 THEN MRESA_TAC sym_line0_fan[`x:real^N`;`y:real^N`;`z:real^N`]
12122 THEN MRESA_TAC sym_line0_fan[`x:real^N`;`z:real^N`;`y:real^N`]
12123 THEN POP_ASSUM MP_TAC
12124 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12125 THEN ASM_REWRITE_TAC[]
12126 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12127 THEN POP_ASSUM MP_TAC
12128 THEN SET_TAC[]);;
12129
12130 let sym_line01_fan=prove(`!x y z:real^N. x IN aff {y, z} /\ DISJOINT {y} {x,z}
12131 ==> aff {y,x} SUBSET aff {y,z}`,
12132 REPEAT GEN_TAC
12133 THEN STRIP_TAC
12134 THEN MP_TAC(SET_RULE`y IN aff {y, z} /\ x IN aff {y, z} ==> {y,x:real^N} SUBSET aff {y,z}`)
12135 THEN ASM_REWRITE_TAC[POINT_IN_LINE;]
12136 THEN STRIP_TAC
12137 THEN MRESA_TAC HULL_MONO[`affine:(real^N->bool)->bool`;` {y,x:real^N}`;`aff { y,z:real^N}`]
12138 THEN POP_ASSUM MP_TAC
12139 THEN REWRITE_TAC[aff;AFFINE_HULL_AFFINE_EQ ]);;
12140
12141
12142 let sym_line02_fan=prove(`!x y z:real^N. x IN aff {y, z} /\ DISJOINT {y} {x,z}
12143 ==> aff {y,z} SUBSET aff {y,x}`,
12144 REPEAT GEN_TAC
12145 THEN STRIP_TAC
12146 THEN MP_TAC(SET_RULE`DISJOINT {y} {x,z}==> ~(x=y:real^N)`)
12147 THEN RESA_TAC
12148 THEN MRESA_TAC sym_line1_fan[`x:real^N`;`y:real^N`;`z:real^N`]
12149 THEN MP_TAC(SET_RULE`y IN aff {y, x} /\ z IN aff {y, x} ==> {y,z:real^N} SUBSET aff {y,x}`)
12150 THEN ASM_REWRITE_TAC[POINT_IN_LINE;]
12151 THEN STRIP_TAC
12152 THEN MRESA_TAC HULL_MONO[`affine:(real^N->bool)->bool`;` {y,z:real^N}`;`aff { y,x:real^N}`]
12153 THEN POP_ASSUM MP_TAC
12154 THEN REWRITE_TAC[aff;AFFINE_HULL_AFFINE_EQ ]
12155 THEN POP_ASSUM MP_TAC
12156 THEN ASSUME_TAC(SET_RULE`{y,x}={x,y}`)
12157 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[th;])
12158 THEN REWRITE_TAC[aff]
12159 THEN RESA_TAC);;
12160
12161
12162
12163 let sym_line_fan0=prove(`!x y z:real^N. x IN aff {y, z} /\ DISJOINT {x} {y,z} /\ DISJOINT {y} {x,z}
12164 ==> aff {x,z} = aff {y,z}`,
12165 REPEAT STRIP_TAC
12166 THEN MRESA_TAC sym_line_fan[`x:real^N`;`y:real^N`;`z:real^N`]
12167 THEN SUBGOAL_THEN `y IN aff {x,z:real^N}` ASSUME_TAC
12168 THENL[ASM_REWRITE_TAC[POINT_IN_LINE1];
12169 MRESA_TAC sym_line_fan[`y:real^N`;`x:real^N`;`z:real^N`]
12170 THEN ASSUME_TAC(SET_RULE`{x,y}={y,x:real^N}`)
12171 THEN ASM_REWRITE_TAC[]]);;
12172
12173
12174 let sym_line_fan1=prove(`!x y z:real^N. x IN aff {y, z} /\ DISJOINT {y} {x,z}
12175 ==> aff {y,z} = aff {y,x}`,
12176 REPEAT STRIP_TAC
12177 THEN MRESA_TAC sym_line01_fan[`x:real^N`;`y:real^N`;`z:real^N`]
12178 THEN MRESA_TAC sym_line02_fan[`x:real^N`;`y:real^N`;`z:real^N`]
12179 THEN POP_ASSUM MP_TAC
12180 THEN POP_ASSUM MP_TAC
12181 THEN SET_TAC[]);;
12182
12183
12184 let aff_ge_1_1_subset_aff_fan=prove(`!x y z:real^3. ~(y=z) /\ x IN aff_ge {y} {z} ==> x IN aff {y,z} `,
12185 REPEAT STRIP_TAC
12186 THEN POP_ASSUM MP_TAC
12187 THEN MRESAL_TAC AFF_GE_1_1[`y:real^3`;`z:real^3`][IN_ELIM_THM]
12188 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
12189 THEN STRIP_TAC
12190 THEN EXISTS_TAC`t1:real`
12191 THEN EXISTS_TAC`t2:real`
12192 THEN ASM_REWRITE_TAC[]);;
12193
12194
12195
12196 let exists_point_notxin_convex_in_xfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) z:real^3.
12197 FAN(x,V,E)  /\ ~(x=z) /\ ~(E={})
12198 ==> ?v. v IN xfan(x,V,E) /\ ~(x IN convex hull{v,z})`,
12199 REPEAT STRIP_TAC
12200 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[]
12201 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;xfan;IN_ELIM_THM]
12202 THEN STRIP_TAC
12203 THEN POP_ASSUM MP_TAC
12204 THEN DISCH_THEN (LABEL_TAC"YEU")
12205 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3->bool)`]
12206 THEN REMOVE_THEN "YEU" MP_TAC
12207 THEN RESA_TAC
12208 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
12209 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
12210 THEN DISJ_CASES_TAC(SET_RULE`~(x IN convex hull{v,z:real^3})\/ (x IN convex hull{v,z})`)
12211 THENL[
12212 EXISTS_TAC `v:real^3`
12213 THEN ASM_REWRITE_TAC[]
12214 THEN EXISTS_TAC `y:real^3->bool`
12215 THEN ASM_REWRITE_TAC[]
12216 THEN ASM_TAC THEN SET_TAC[];
12217 EXISTS_TAC `w:real^3`
12218 THEN STRIP_TAC
12219 THENL[
12220 EXISTS_TAC `y:real^3->bool`
12221 THEN ASM_REWRITE_TAC[]
12222 THEN ASM_TAC THEN SET_TAC[];
12223 MRESA1_TAC CONVEX_HULL_SUBSET_AFFINE_HULL`{v,z:real^3}`
12224 THEN MP_TAC(SET_RULE`x IN convex hull {v, z:real^3}/\ convex hull {v, z} SUBSET affine hull {v, z}
12225 ==> x IN affine hull {v, z}`)
12226 THEN RESA_TAC
12227 THEN STRIP_TAC
12228 THEN MRESA1_TAC CONVEX_HULL_SUBSET_AFFINE_HULL`{w,z:real^3}`
12229 THEN MP_TAC(SET_RULE`x IN convex hull {w, z:real^3}/\ convex hull {w, z} SUBSET affine hull {w, z}
12230 ==> x IN affine hull {w, z}`)
12231 THEN RESA_TAC
12232 THEN MP_TAC(SET_RULE`~(x=z) /\ ~(x=v) /\ ~(x=w)==> DISJOINT {x:real^3} {v,z} /\ DISJOINT{x} {w,z}`) THEN RESA_TAC
12233 THEN MRESAL_TAC sym_line_fan[`x:real^3`;`v:real^3`;`z:real^3`][aff]
12234 THEN MRESAL_TAC sym_line_fan[`x:real^3`;`w:real^3`;`z:real^3`][aff]
12235 THEN MRESA_TAC POINT_IN_LINE1[`x:real^3` ;`w:real^3`]
12236 THEN POP_ASSUM MP_TAC
12237 THEN REWRITE_TAC[aff]
12238 THEN POP_ASSUM (fun th -> REWRITE_TAC[SYM(th)])
12239 THEN ASM_REWRITE_TAC[SYM aff]]]);;
12240
12241
12242
12243 let notempty_xfan_inter_segment_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) z:real^3 v:real^3.
12244 FAN(x,V,E) /\ v IN xfan(x,V,E)
12245 ==> ~(xfan(x,V,E) INTER segment[v,z] ={})`,
12246 REPEAT STRIP_TAC
12247 THEN POP_ASSUM MP_TAC
12248 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`;IN_ELIM_THM;INTER;segment]
12249 THEN EXISTS_TAC`v:real^3`
12250 THEN ASM_REWRITE_TAC[]
12251 THEN EXISTS_TAC`&0`
12252 THEN REWRITE_TAC[REAL_ARITH`&1- &0= &1 /\ &0<= &0 /\ &0<= &1`]
12253 THEN REDUCE_VECTOR_TAC);;
12254
12255
12256
12257 let xfan_inter_segment_closed_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) z:real^3 v:real^3.
12258 FAN(x,V,E) ==> closed(xfan(x,V,E) INTER segment[v,z])`,
12259 REPEAT STRIP_TAC
12260 THEN MATCH_MP_TAC CLOSED_INTER
12261 THEN POP_ASSUM MP_TAC 
12262 THEN REWRITE_TAC[CLOSED_SEGMENT;xfan_closed_fan]);;
12263
12264
12265
12266 let point_in_yfan_not_x_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool z:real^3.
12267 FAN(x,V,E) /\ ~(E={})
12268 /\ U IN topological_component_yfan (x,V,E)
12269 /\ z IN U
12270 ==> ~(x=z)`,
12271 REPEAT STRIP_TAC
12272 THEN POP_ASSUM MP_TAC
12273 THEN MRESA_TAC topological_component_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` U:real^3->bool`]
12274 THEN MP_TAC(SET_RULE`U SUBSET yfan (x:real^3,V:real^3->bool,E)/\ z IN U ==> z IN yfan(x,V,E)`)
12275 THEN RESA_TAC
12276 THEN MRESA_TAC x_in_xfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12277 THEN POP_ASSUM MP_TAC
12278 THEN POP_ASSUM MP_TAC
12279 THEN REWRITE_TAC[yfan]
12280 THEN SET_TAC[]);;
12281
12282
12283 let zpoint_in_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool z:real^3.
12284 FAN(x,V,E) /\ ~(E={})
12285 /\ U IN topological_component_yfan (x,V,E)
12286 /\ z IN U
12287 ==> z IN yfan(x,V,E)`,
12288 REPEAT STRIP_TAC
12289 THEN POP_ASSUM MP_TAC
12290 THEN MRESA_TAC topological_component_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` U:real^3->bool`]
12291 THEN MP_TAC(SET_RULE`U SUBSET yfan (x:real^3,V:real^3->bool,E)/\ z IN U ==> z IN yfan(x,V,E)`)
12292 THEN RESA_TAC
12293 THEN SET_TAC[]);;
12294
12295
12296
12297
12298 let segment_in_segment=prove(`!x y z:real^N. z IN segment [x,y]==>  (!t. &0<= t /\ t<= &1 ==> (&1-t) %z +t %y IN segment[x,y])`,
12299 REWRITE_TAC[segment;IN_ELIM_THM]
12300 THEN REPEAT STRIP_TAC
12301 THEN ASM_REWRITE_TAC[]
12302 THEN EXISTS_TAC`(&1- t)* u+t:real`
12303 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t) % ((&1 - u) % x + u % y) + t % y =
12304  (&1 - ((&1 - t) * u + t)) % x + ((&1 - t) * u + t) % y:real^N`]
12305 THEN STRIP_TAC
12306 THENL[MATCH_MP_TAC REAL_LE_ADD
12307 THEN ASM_REWRITE_TAC[]
12308 THEN MATCH_MP_TAC REAL_LE_MUL
12309 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- t<=> t<= &1`];
12310
12311 REWRITE_TAC[REAL_ARITH`(&1 - t) * u + t <= &1<=> &0<= (&1 - t) * (&1-u)`]
12312 THEN MATCH_MP_TAC REAL_LE_MUL
12313 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- t<=> t<= &1`]]);;
12314
12315
12316 let connect_insidepoint_to_bound_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool z:real^3.
12317 FAN(x,V,E) 
12318 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12319 /\ fan80(x,V,E)
12320 /\ U IN topological_component_yfan (x,V,E)
12321 /\ z IN U
12322 ==> ?y. ~(y=x)/\  y IN xfan(x,V,E) /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan(x,V,E))`,
12323 REPEAT STRIP_TAC
12324 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12325 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;` z:real^3`]
12326 THEN MRESA_TAC exists_point_notxin_convex_in_xfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` z:real^3`]
12327 THEN EXISTS_TAC`closest_point (xfan (x:real^3,V:real^3->bool,E) INTER segment[v,z]) (z:real^3)`
12328 THEN MRESA_TAC xfan_inter_segment_closed_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` z:real^3`;`v:real^3`]
12329 THEN MRESA_TAC notempty_xfan_inter_segment_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` z:real^3`;`v:real^3`]
12330 THEN MRESA_TAC CLOSEST_POINT_EXISTS[`xfan (x:real^3,V:real^3->bool,E) INTER segment[v,z]`;`(z:real^3)`]
12331 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
12332 THEN MP_TAC (SET_RULE`closest_point (xfan (x:real^3,V:real^3->bool,E) INTER segment [v,z:real^3]) z IN
12333       xfan (x,V,E) INTER segment [v,z]==> closest_point (xfan (x,V,E) INTER segment [v,z]) z IN
12334       xfan (x,V,E)/\ closest_point (xfan (x,V,E) INTER segment [v,z]) z IN segment [v,z]`)
12335 THEN RESA_TAC
12336 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"EM") THEN DISCH_TAC
12337 THEN POP_ASSUM (fun th-> MP_TAC th THEN ASSUME_TAC(th))
12338 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SEGMENT_CONVEX_HULL]
12339 THEN STRIP_TAC
12340 THEN MP_TAC(SET_RULE`closest_point (xfan (x:real^3,V:real^3->bool,E) INTER convex hull {v, z}) z IN
12341  convex hull {v, z} /\ ~(x IN convex hull {v, z})==> ~(closest_point (xfan (x,V,E) INTER convex hull {v, z} ) z = x)`)
12342 THEN RESA_TAC
12343 THEN STRIP_TAC
12344 THENL[ASM_REWRITE_TAC[SEGMENT_CONVEX_HULL];
12345 ABBREV_TAC`y1=closest_point (xfan (x:real^3,V:real^3->bool,E) INTER segment [v,z]) z`
12346 THEN SUBGOAL_THEN`!t. &0< t /\ t< &1==>dist (z,(&1 - t) % y1 + t % z)<dist (z,y1:real^3)` ASSUME_TAC
12347 THENL[ REPEAT STRIP_TAC
12348 THEN REWRITE_TAC[dist;VECTOR_ARITH`z - ((&1 - t) % y1 + t % z)=(&1 - t)%(z-y1)`]
12349 THEN MP_TAC(ISPEC`&1- t:real`REAL_ABS_REFL)
12350 THEN REWRITE_TAC[REAL_ARITH`&0<= &1-t <=> t<= &1`;NORM_MUL]
12351 THEN MP_TAC(REAL_ARITH`t< &1==> t<= &1`) THEN RESA_TAC
12352 THEN RESA_TAC
12353 THEN MRESAL_TAC REAL_LT_RMUL[`&1-t:real`;`&1:real`;`norm (z - y1:real^3)`][REAL_ARITH`&1*A=A`;REAL_ARITH`&1-t< &1<=> &0< t`]
12354 THEN POP_ASSUM MATCH_MP_TAC
12355 THEN MATCH_MP_TAC(REAL_ARITH`&0<= A /\ ~(A= &0) ==> &0 < A`)
12356 THEN REWRITE_TAC[NORM_POS_LE;NORM_EQ_0;VECTOR_ARITH`A-B= vec 0<=>A=B`]
12357 THEN STRIP_TAC
12358 THEN REMOVE_THEN "EM" MP_TAC
12359 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
12360 THEN MRESA_TAC topological_component_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`]
12361 THEN MP_TAC(SET_RULE`z:real^3 IN U /\ U SUBSET yfan(x,V,E) ==> z IN yfan(x:real^3,V:real^3->bool,E)`)
12362 THEN ASM_REWRITE_TAC[yfan]
12363 THEN SET_TAC[];
12364 POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"NHIEU")
12365 THEN REPEAT STRIP_TAC
12366 THEN ASM_REWRITE_TAC[yfan;DIFF;IN_ELIM_THM;SET_RULE`(&1 - t) % y1 + t % z IN (:real^3)`]
12367 THEN STRIP_TAC
12368 THEN MP_TAC (REAL_ARITH`&0<t /\ t< &1==> &0<= t /\ t:real<= &1`) THEN RESA_TAC
12369 THEN MRESA_TAC segment_in_segment[`v:real^3`;`z:real^3`;`y1:real^3`]
12370 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`)
12371 THEN MP_TAC(SET_RULE`(&1 - t) % y1 + t % z IN xfan (x:real^3,V:real^3->bool,E) /\ (&1 - t) % y1 + t % z IN segment [v,z]==> (&1 - t) % y1 + t % z IN xfan (x,V,E) INTER segment [v,z]`)
12372 THEN RESA_TAC
12373 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th`(&1 - t) % y1 + t % z:real^3`)
12374 THEN REMOVE_THEN "NHIEU"(fun th-> MRESA1_TAC th`t:real`)
12375 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC]]);;
12376
12377
12378 let in_topological_component_yfan_is_connected=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool.
12379 U IN topological_component_yfan (x,V,E)
12380 ==> connected U`,
12381 REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
12382 THEN REPEAT STRIP_TAC
12383 THEN ASM_REWRITE_TAC[CONNECTED_CONNECTED_COMPONENT]);;
12384
12385
12386
12387 let expand_element_in_topological_component_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool z:real^3.
12388 FAN(x,V,E) 
12389 /\ U IN topological_component_yfan (x,V,E)
12390 /\ z IN U
12391 ==> U=connected_component (yfan(x,V,E)) z`,
12392 REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
12393 THEN REPEAT STRIP_TAC
12394 THEN POP_ASSUM MP_TAC
12395 THEN ASM_REWRITE_TAC[]
12396 THEN STRIP_TAC 
12397 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y:real^3`;`z:real^3`]);;
12398
12399
12400
12401 let segmentsubset_aff_gt=prove(`!x y z w:real^N.
12402 DISJOINT {x} {y,z}/\ w IN aff_gt {x} {y,z}
12403 ==> !t. &0<= t /\ t< &1 ==> (&1-t) %w+t%z IN aff_gt {x} {y,z}`,
12404 REPEAT GEN_TAC THEN STRIP_TAC
12405 THEN POP_ASSUM MP_TAC
12406 THEN MRESAL_TAC AFF_GT_1_2[`x:real^N`;`y:real^N`;`z:real^N`][IN_ELIM_THM]
12407 THEN REPEAT STRIP_TAC
12408 THEN ASM_REWRITE_TAC[]
12409 THEN EXISTS_TAC`(&1-t)*t1:real`
12410 THEN EXISTS_TAC`(&1-t)*t2:real`
12411 THEN EXISTS_TAC`(&1-t)*t3+t:real`
12412 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t) % (t1 % x + t2 % y + t3 % z) + t % z =
12413  ((&1 - t) * t1) % x + ((&1 - t) * t2) % y + ((&1 - t) * t3 + t) % z:real^N`;REAL_ARITH`(&1 - t) * t1 + (&1 - t) * t2 + (&1 - t) * t3 + t=(&1 - t) * (t1 + t2 +t3) + t/\ (&1 - t) * &1 + t = &1`]
12414 THEN STRIP_TAC
12415 THENL[MATCH_MP_TAC REAL_LT_MUL
12416 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- t<=> t< &1`];
12417
12418 MATCH_MP_TAC (REAL_ARITH`&0<A /\ &0<=B==> &0< A+B`)
12419 THEN ASM_REWRITE_TAC[]
12420 THEN MATCH_MP_TAC REAL_LT_MUL
12421 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- t<=> t< &1`]]);;
12422
12423 let point_in_aff_gt_in_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y:real^3 z:real^3 w:real^3.
12424 FAN(x,V,E) /\ DISJOINT {x} {y,z} /\ w IN aff_gt {x} {y,z}
12425 /\ (!t. &0 < t /\ t < &1 ==> (&1 - t) % y + t % z IN yfan (x,V,E))
12426 ==> w IN yfan(x,V,E)`,
12427 REPEAT STRIP_TAC
12428 THEN MRESA_TAC aff_gt_connect_bound_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3`;`z:real^3`]
12429 THEN ASM_TAC THEN SET_TAC[]);;
12430
12431
12432
12433
12434 let segment_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y:real^3 z:real^3 w:real^3.
12435 FAN(x,V,E) /\ DISJOINT {x} {y,z} /\ z IN yfan(x,V,E) /\ w IN aff_gt {x} {y,z}
12436 /\ (!t. &0 < t /\ t < &1 ==> (&1 - t) % y + t % z IN yfan (x,V,E))
12437 ==> segment[w,z] SUBSET yfan(x,V,E)`,
12438
12439 REWRITE_TAC[segment;SUBSET;IN_ELIM_THM]
12440 THEN REPEAT STRIP_TAC
12441 THEN MRESA_TAC aff_gt_connect_bound_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3`;`z:real^3`]
12442 THEN MRESA_TAC segmentsubset_aff_gt[`x:real^3`;`y:real^3`;`z:real^3`;`w:real^3`]
12443 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real`)
12444 THEN POP_ASSUM MP_TAC
12445 THEN MP_TAC(REAL_ARITH`u<= &1==> u< &1\/ u= &1`)
12446 THEN RESA_TAC
12447 THENL[
12448 ASM_TAC THEN SET_TAC[];
12449 ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - &1) % w + &1 % z=z:real^3`]]);;
12450
12451
12452 let exists_in_aff_gt_disjoint=prove(`!x:real^3  v:real^3 u:real^3.
12453 DISJOINT {x} {v,u} ==> ?y:real^3. y IN aff_gt {x} {v, u}`,
12454 REPEAT STRIP_TAC
12455 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
12456 THEN EXISTS_TAC`&0 % x+ &1 / &2 % v+ &1/ &2 %u:real^3 `
12457 THEN EXISTS_TAC`&0`
12458 THEN EXISTS_TAC`&1/ &2`
12459 THEN EXISTS_TAC`&1/ &2`
12460 THEN ASM_REWRITE_TAC[]
12461 THEN REAL_ARITH_TAC);;
12462
12463
12464
12465 let aff_gt_subset_component_y_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3.
12466 FAN(x,V,E) 
12467 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12468 /\ fan80(x,V,E)
12469 /\ U IN topological_component_yfan (x,V,E)
12470 /\ z IN U
12471 /\ DISJOINT {x} {y,z}
12472 /\ (!t. &0 < t /\ t < &1 ==> (&1 - t) % y + t % z IN yfan (x,V,E))
12473 ==> aff_gt {x} {y,z} SUBSET U`,
12474 REPEAT STRIP_TAC
12475 THEN MRESA_TAC expand_element_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`z:real^3`]
12476 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`y:real^3`;`z:real^3`]
12477 THEN MRESA_TAC CONVEX_AFF_GT[`{x:real^3}`;`{y,z:real^3}`]
12478 THEN MRESA1_TAC CONVEX_CONNECTED`aff_gt {x:real^3} {y,z:real^3}`
12479 THEN MRESA_TAC aff_gt_connect_bound_subset_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`y:real^3`;`z:real^3`]
12480 THEN MRESA_TAC CONNECTED_COMPONENT_MAXIMAL[`yfan(x:real^3, (V:real^3->bool) ,E)`;`aff_gt {x:real^3} {y,z}`;`y':real^3`;]
12481 THEN MATCH_MP_TAC(SET_RULE`aff_gt {x} {y, z} SUBSET connected_component (yfan (x,V,E)) y'/\ connected_component (yfan (x:real^3, (V:real^3->bool),E)) y'= connected_component (yfan (x,V,E)) z==> aff_gt {x} {y, z} SUBSET connected_component (yfan (x,V,E)) z`)
12482 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_EQ_EQ;]
12483 THEN MRESA_TAC point_in_aff_gt_in_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`y:real^3`;`z:real^3`;`y':real^3`]
12484 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12485 THEN MRESA_TAC zpoint_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`z:real^3`]
12486 THEN MRESA_TAC CONNECTED_COMPONENT_OF_SUBSET [`segment [y',z:real^3]`;`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`z:real^3`]
12487 THEN POP_ASSUM MATCH_MP_TAC
12488 THEN MRESA_TAC segment_subset_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`y:real^3`;`z:real^3`;`y':real^3`]
12489 THEN REWRITE_TAC[SEGMENT_CONVEX_HULL]
12490 THEN MRESA1_TAC CONVEX_CONVEX_HULL`{y',z:real^3}`
12491 THEN MRESA1_TAC CONVEX_CONNECTED `convex hull {y', z:real^3}`
12492 THEN MRESA1_TAC CONNECTED_IFF_CONNECTED_COMPONENT`convex hull {y', z:real^3}`
12493 THEN POP_ASSUM(fun th-> MRESA_TAC th[`y':real^3`;`z:real^3`])
12494 THEN POP_ASSUM MATCH_MP_TAC
12495 THEN MRESAL_TAC expansion1_convex_fan[`y':real^3`;`z:real^3`;`&0`][REAL_ARITH`&0<= &0 /\ &0<= &1`;VECTOR_ARITH`(&1- &0)%v+ &0 % u=v`]
12496 THEN MRESAL_TAC expansion1_convex_fan[`y':real^3`;`z:real^3`;`&1`][REAL_ARITH`&0<= &1 /\ &1 <= &1`;VECTOR_ARITH`(&1- &1)%v+ &1 % u=u`]);;
12497
12498
12499
12500
12501
12502
12503 let exists_connect_point_in_xfanto_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool z:real^3.
12504 FAN(x,V,E) 
12505 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12506 /\ fan80(x,V,E)
12507 /\ U IN topological_component_yfan (x,V,E)
12508 /\ z IN U
12509 ==> ?y. ~(y=x) /\ y IN xfan(x,V,E) /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN U)`,
12510
12511 REPEAT STRIP_TAC
12512 THEN MRESA_TAC connect_insidepoint_to_bound_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `U:real^3->bool`;`z:real^3`]
12513 THEN EXISTS_TAC `y:real^3`
12514 THEN ASM_REWRITE_TAC[]
12515 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12516 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;` z:real^3`]
12517 THEN MP_TAC(SET_RULE`~(x=z) /\ ~(y=x)==> DISJOINT {x} {y,z:real^3}`)
12518 THEN RESA_TAC
12519 THEN MRESA_TAC aff_gt_subset_component_y_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`]
12520 THEN REPEAT STRIP_TAC
12521 THEN MATCH_MP_TAC(SET_RULE`aff_gt {x:real^3} {y, z} SUBSET U /\ (&1 - t) % y + t % z IN aff_gt {x} {y, z}==> (&1 - t) % y + t % z IN U`)
12522 THEN ASM_REWRITE_TAC[]
12523 THEN MRESAL_TAC AFF_GT_1_2[`(x:real^3)` ;` (y:real^3)`;`(z:real^3) `;][IN_ELIM_THM]
12524 THEN EXISTS_TAC`&0`
12525 THEN EXISTS_TAC `&1- t:real`
12526 THEN EXISTS_TAC `t:real`
12527 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- t<=> t< &1`;REAL_ARITH`&0 + &1 - t + t = &1`]
12528 THEN VECTOR_ARITH_TAC);;
12529
12530
12531
12532
12533 let place_there_point_line_fan=prove(`!x:real^3 y:real^3 z:real^3.
12534 ~(x=y)/\ z IN aff {x,y}==> ?t:real. &0<t /\ t< &1 /\ (&1-t)%y+t % z IN aff_ge {x} {y}`,
12535 REPEAT GEN_TAC
12536 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
12537 THEN RESA_TAC
12538 THEN MRESAL_TAC AFF_GE_1_1[`x:real^3`;`y:real^3`][IN_ELIM_THM]
12539 THEN DISJ_CASES_TAC(REAL_ARITH`&0<= v \/ v< &0`)
12540 THENL[EXISTS_TAC`&1/ &2`
12541 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1/ &2 /\ &1/ &2< &1`]
12542 THEN EXISTS_TAC`&1/ &2 *u`
12543 THEN EXISTS_TAC`&1/ &2*(&1+v)`
12544 THEN ASM_REWRITE_TAC[REAL_ARITH`&1/ &2 *u + &1/ &2 * (&1 + v)= &1/ &2 *(&1 +(u+v))`;REAL_ARITH`&1 / &2 * (&1 + &1) = &1`;VECTOR_ARITH`(&1 - &1 / &2) % y + &1 / &2 % (u % x + v % y) =
12545  (&1 / &2 * u) % x + (&1 / &2 * (&1 + v)) % y`]
12546 THEN MATCH_MP_TAC REAL_LE_MUL
12547 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1/ &2`]
12548 THEN MATCH_MP_TAC REAL_LE_ADD
12549 THEN ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC;
12550 EXISTS_TAC`inv u`
12551 THEN POP_ASSUM MP_TAC
12552 THEN ASM_REWRITE_TAC[REAL_ARITH`v< &0 <=> (u+v)< u `]
12553 THEN STRIP_TAC
12554 THEN MP_TAC(REAL_ARITH`&1< u==> &0< u /\ ~(u= &0)`)
12555 THEN RESA_TAC
12556 THEN MRESA1_TAC REAL_LT_INV `u:real`
12557 THEN MRESA1_TAC REAL_INV_LT_1 `u:real`
12558 THEN MRESA1_TAC REAL_MUL_LINV `u:real`
12559 THEN EXISTS_TAC`&1`
12560 THEN EXISTS_TAC `&0`
12561 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0 /\ &1 + &0 = &1/\ u+ &1 - &1 =u`;VECTOR_ARITH`(&1 - inv u) % y + inv u % (u % x + v % y)=(&1 - inv u*(u+ &1- (u+v))) % y + (inv u * u) % x /\ (&1 - &1) % y + &1 % x = &1 % x + &0 % y`]]);;
12562
12563
12564
12565
12566 let aff_ge_1_1_subset_xfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y:real^3.
12567 FAN(x,V,E) 
12568 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12569 /\ y IN xfan(x,V,E) /\ ~(x=y)
12570 ==>  aff_ge {x} {y} SUBSET xfan(x,V,E)`,
12571
12572 REWRITE_TAC[xfan;IN_ELIM_THM;SUBSET]
12573 THEN REPEAT STRIP_TAC
12574 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
12575 THEN POP_ASSUM MP_TAC
12576 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[IN]
12577 THEN RESA_TAC
12578 THEN EXISTS_TAC`e:real^3->bool`
12579 THEN ASM_REWRITE_TAC[]
12580 THEN MRESA_TAC aff_ge_1_1_subset_aff_ge_fan[`x:real^3`;`v:real^3`;`w:real^3`;`y:real^3`]
12581 THEN POP_ASSUM MP_TAC
12582 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)] THEN ASM_REWRITE_TAC[] THEN ASSUME_TAC(th))
12583 THEN ASM_REWRITE_TAC[]
12584 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
12585 ` (v:real^3)`]
12586 THEN POP_ASSUM MP_TAC
12587 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
12588 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)] THEN GEN_REWRITE_TAC (LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[IN]THEN ASM_REWRITE_TAC[] THEN ASSUME_TAC(th))
12589 THEN STRIP_TAC
12590 THEN ASM_REWRITE_TAC[]
12591 THEN ASM_TAC THEN SET_TAC[]);;
12592
12593
12594 let point_in_yfan_and_point_in_xfan_indepent_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3.
12595 FAN(x,V,E) 
12596 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12597 /\ fan80(x,V,E)
12598 /\ U IN topological_component_yfan (x,V,E)
12599 /\ z IN U
12600 /\ y IN xfan(x,V,E) 
12601 /\ ~(y=x) /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
12602 ==> ~collinear {x,y,z}`,
12603 REPEAT STRIP_TAC
12604 THEN POP_ASSUM MP_TAC
12605 THEN POP_ASSUM MP_TAC
12606 THEN DISCH_THEN(LABEL_TAC"EM")
12607 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12608 THEN MRESA_TAC zpoint_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`z:real^3`]
12609 THEN ASM_REWRITE_TAC[collinear_fan;SET_RULE`~(y=x)<=> ~(x=y)`]
12610 THEN STRIP_TAC
12611 THEN MRESA_TAC place_there_point_line_fan[`x:real^3`;`y:real^3`;`z:real^3`]
12612 THEN MRESA_TAC aff_ge_1_1_subset_xfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3`]
12613 THEN MP_TAC(SET_RULE`(&1 - t) % y + t % z IN aff_ge {x:real^3} {y}/\ aff_ge {x} {y} SUBSET xfan (x,V:real^3->bool,E) ==> (&1 - t) % y + t % z IN  xfan (x,V,E)`)
12614 THEN RESA_TAC
12615 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th`t:real`)
12616 THEN POP_ASSUM MP_TAC
12617 THEN ASM_REWRITE_TAC[yfan]
12618 THEN POP_ASSUM MP_TAC
12619 THEN SET_TAC[]);;
12620
12621 let permutes_4points_collinear=prove(`!x y z w:real^N.
12622 ~(x=y)/\ ~(x=z) /\ y IN aff {x,z}/\ ~collinear{x,y,w}==> ~collinear{x,z,w}`,
12623 REWRITE_TAC[collinear_fan]
12624 THEN REPEAT STRIP_TAC
12625 THEN ASM_REWRITE_TAC[]
12626 THEN POP_ASSUM MP_TAC
12627 THEN MP_TAC(SET_RULE`~(x=y)/\ ~(x=z) ==> DISJOINT {x} {y, z:real^N}`)
12628 THEN RESA_TAC
12629 THEN MRESA_TAC sym_line_fan1[`y:real^N`;`x:real^N`;`z:real^N`]);;
12630
12631
12632 let permutes_4points_collinear1=prove(`!x y z w:real^N.
12633 ~(x=y)/\ ~(x=z) /\  y IN aff {x,z}/\ ~collinear{x,z,w}==> ~collinear{x,y,w}`,
12634 REWRITE_TAC[collinear_fan]
12635 THEN REPEAT STRIP_TAC
12636 THEN ASM_REWRITE_TAC[]
12637 THEN POP_ASSUM MP_TAC
12638 THEN MP_TAC(SET_RULE`~(x=y)/\ ~(x=z) ==>DISJOINT {x} {y, z:real^N}`)
12639 THEN RESA_TAC
12640 THEN MRESA_TAC sym_line01_fan[`y:real^N`;`x:real^N`;`z:real^N`]
12641 THEN ASM_TAC  THEN SET_TAC[]);;
12642
12643
12644 let in_aff_gt_eq_azim=prove(`!x y z w0 w1:real^3.
12645 ~(x=z) /\ y IN aff_gt {x} {z}==> azim x y w0 w1=azim x z w0 w1`,
12646 REPEAT STRIP_TAC 
12647 THEN POP_ASSUM MP_TAC
12648 THEN MRESAL_TAC AFF_GT_1_1[`x:real^3`;`z:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {z}<=> ~(x=z)`]
12649 THEN ASM_TAC
12650 THEN GEOM_ORIGIN_TAC `x:real^3`
12651 THEN REPEAT STRIP_TAC
12652 THEN POP_ASSUM MP_TAC
12653 THEN ASM_REWRITE_TAC[VECTOR_ARITH`u % (x + vec 0) + v%(x+ z)= (u+v)%x+v %z`;VECTOR_ARITH`(x + y = &1 % x + v % z)<=> y = v % z`]
12654 THEN RESA_TAC
12655 THEN ASM_TAC THEN SET_TAC[AZIM_SPECIAL_SCALE]);;
12656
12657 let no_origin_aff_ge_is_aff_gt=prove(`!x y z:real^3. 
12658 ~(x=y) /\ ~(x=z) /\ z IN aff_ge {x} {y}==> z IN aff_gt {x} {y}`,
12659 REPEAT STRIP_TAC
12660 THEN POP_ASSUM MP_TAC
12661 THEN MRESAL_TAC AFF_GT_1_1[`x:real^3`;`y:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {z}<=> ~(x=z)`]
12662 THEN MRESAL_TAC AFF_GE_1_1[`x:real^3`;`y:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {z}<=> ~(x=z)`]
12663 THEN STRIP_TAC
12664 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
12665 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0< t2`)
12666 THEN RESA_TAC
12667 THEN REDUCE_ARITH_TAC
12668 THEN RESA_TAC
12669 THEN REDUCE_VECTOR_TAC
12670 THEN ASM_REWRITE_TAC[]
12671 THEN STRIP_TAC
12672 THEN EXISTS_TAC`t1:real`
12673 THEN EXISTS_TAC`t2:real`
12674 THEN ASM_REWRITE_TAC[]);;
12675
12676
12677
12678 (*CASE 1*)
12679
12680
12681
12682 let exists_edge_component_yfan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (y:real^3).
12683  FAN(x,V,E) /\ (!v. v IN V==>CARD (set_of_edge v V E) >1) /\ v IN V
12684 /\  ~(y IN set_of_edge v V E) 
12685 ==>
12686 (?(w:real^3). (w IN (set_of_edge v V E)) /\
12687 (!(w1:real^3). (w1 IN (set_of_edge v V E)) ==> azim1 x v y w <=  azim1 x v y w1))`,
12688
12689 (let lemma = prove
12690    (`!X:real->bool. 
12691           FINITE X /\ ~(X = {}) 
12692           ==> ?a. a IN X /\ !x. x IN X ==> a <= x`,
12693     MESON_TAC[INF_FINITE]) in
12694
12695 REPEAT STRIP_TAC
12696 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`]
12697 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` v':real^3`;`v:real^3`]
12698 THEN MRESA_TAC FINITE_IMAGE [`azim1 (x:real^3) v y`;`(set_of_edge v (V:real^3->bool) (E:(real^3->bool)->bool))`]
12699 THEN MP_TAC(SET_RULE`v' IN set_of_edge v V E==> ~(set_of_edge v (V:real^3->bool) (E:(real^3->bool)->bool)= {}) `)
12700 THEN RESA_TAC
12701 THEN MRESA_TAC IMAGE_EQ_EMPTY[`azim1 (x:real^3) v y`;`(set_of_edge v (V:real^3->bool) (E:(real^3->bool)->bool))`]
12702 THEN MRESA1_TAC lemma`IMAGE (azim1 (x:real^3) v y) (set_of_edge v (V:real^3->bool) (E:(real^3->bool)->bool))
12703 `
12704 THEN POP_ASSUM MP_TAC
12705 THEN POP_ASSUM MP_TAC
12706 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
12707 THEN REPEAT STRIP_TAC
12708 THEN EXISTS_TAC`x':real^3`
12709 THEN ASM_REWRITE_TAC[]
12710 THEN POP_ASSUM MP_TAC
12711 THEN DISCH_THEN(LABEL_TAC"YEU")
12712 THEN REPEAT STRIP_TAC
12713 THEN SUBGOAL_THEN`(?x'. x' IN set_of_edge v V E /\ azim1 x v y w1 = azim1 x v y (x':real^3))`ASSUME_TAC
12714 THENL[
12715 EXISTS_TAC`w1:real^3`
12716 THEN ASM_REWRITE_TAC[];
12717 REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th`azim1 x v y (w1:real^3)`)]));;
12718
12719
12720
12721
12722 let v_subset_xfan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool).
12723 FAN(x,V,E) /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12724 ==> V SUBSET xfan(x,V,E)`,
12725 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
12726 THEN REPEAT STRIP_TAC
12727 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` x':real^3`]
12728 THEN EXISTS_TAC`{x',v:real^3}`
12729 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` v:real^3`;`x':real^3`]
12730 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
12731 THEN ASM_TAC THEN SET_TAC[IN]);;
12732
12733
12734
12735
12736 let set_of_edge_subset_edges=prove(`!(V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3).
12737  set_of_edge v V E SUBSET V`,
12738 REWRITE_TAC[set_of_edge] THEN SET_TAC[]);;
12739
12740
12741
12742
12743
12744
12745
12746 let aff_ge_2_1_is_exists_point_inaff_ge_1_2=prove(`!x:real^3 y:real^3 z:real^3 w:real^3.
12747 DISJOINT {x} {y,w} /\ DISJOINT {x,y} {w}/\ z IN aff_ge {x,y} {w}==> ?t. &0<t /\ t< &1 /\ (&1-t) %y+ t%z IN aff_ge {x} {y,w}`,
12748
12749 REPEAT STRIP_TAC
12750 THEN POP_ASSUM MP_TAC
12751 THEN MRESAL_TAC AFF_GE_2_1[`x:real^3`;`y:real^3`;`w:real^3`][IN_ELIM_THM]
12752 THEN STRIP_TAC
12753 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`y:real^3`;`w:real^3`][IN_ELIM_THM]
12754 THEN DISJ_CASES_TAC(REAL_ARITH`&0<= t2 \/ t2 < &0`)
12755 THENL[EXISTS_TAC`&1/ &2`
12756 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1/ &2/\ &1/ &2 < &1`]
12757 THEN EXISTS_TAC`&1/ &2 * t1:real`
12758 THEN EXISTS_TAC`&1/ &2 * (t2+ &1):real`
12759 THEN EXISTS_TAC`&1/ &2 * t3:real`
12760 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 / &2 * t1 + &1 / &2 * (t2 + &1) + &1 / &2 * t3 = &1/ &2 *(&1 +(t1+t2+t3))`;VECTOR_ARITH`(&1 - &1 / &2) % y + &1 / &2 % (t1 % x + t2 % y + t3 % w) =
12761  (&1 / &2 * t1) % x + (&1 / &2 * (t2 + &1)) % y + (&1 / &2 * t3) % w`;REAL_ARITH`&1/ &2 *(&1 + &1)= &1`]
12762 THEN STRIP_TAC
12763 THEN MATCH_MP_TAC REAL_LE_MUL
12764 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1/ &2`]
12765 THEN POP_ASSUM MP_TAC
12766 THEN REAL_ARITH_TAC;
12767
12768 EXISTS_TAC`inv(&1 - t2):real`
12769 THEN MP_TAC(REAL_ARITH`t2< &0 ==> &0< &1 -t2 /\ &1< &1 -t2 /\ &0<= &1 -t2 /\ ~(&1- t2= &0) `)
12770 THEN RESA_TAC
12771 THEN MRESA1_TAC REAL_LT_INV`&1-t2`
12772 THEN MRESA1_TAC REAL_LE_INV`&1-t2`
12773 THEN MRESA1_TAC REAL_MUL_LINV `&1- t2:real`
12774 THEN MRESA1_TAC REAL_INV_LT_1`&1- t2`
12775 THEN EXISTS_TAC`inv(&1 - t2)* t1:real`
12776 THEN EXISTS_TAC`inv(&1 - t2)* t2 + &1 - inv(&1 - t2):real`
12777 THEN EXISTS_TAC`inv(&1 - t2)* t3`
12778 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - t2) * t1 +
12779  (inv (&1 - t2) * t2 + &1 - inv (&1 - t2)) +
12780  inv (&1 - t2) * t3= inv (&1 - t2) * (t1 +t2+t3)+ &1 - inv (&1 - t2) /\ inv (&1 - t2) * &1 + &1 - inv (&1 - t2) = &1`;VECTOR_ARITH`(&1 - inv (&1 - t2)) % y + inv (&1 - t2) % (t1 % x + t2 % y + t3 % w) =
12781  (inv (&1 - t2) * t1) % x +
12782  (inv (&1 - t2) * t2 + &1 - inv (&1 - t2)) % y +
12783  (inv (&1 - t2) * t3) % w`;REAL_ARITH`inv (&1 - t2) * t2 + &1 - inv (&1 - t2)= &1 - inv (&1 - t2) *(&1-t2)`;REAL_ARITH`&0<= &1 - &1`]
12784 THEN MATCH_MP_TAC REAL_LE_MUL
12785 THEN ASM_REWRITE_TAC[]]);;
12786
12787
12788 let not_azim_points_in_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 u:real^3.
12789 FAN(x,V,E) 
12790 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12791 /\ fan80(x,V,E)
12792 /\ U IN topological_component_yfan (x,V,E)
12793 /\ z IN U
12794 /\ u IN V
12795 /\ y IN aff_ge {x} {u}
12796 /\ y IN xfan (x,V,E)
12797 /\ ~(y=x)
12798  /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
12799 ==>(!(w1:real^3). (w1 IN (set_of_edge u V E)) ==> ~(azim x u z w1= &0))`,
12800
12801 REPEAT STRIP_TAC
12802 THEN POP_ASSUM MP_TAC
12803 THEN POP_ASSUM MP_TAC
12804 THEN POP_ASSUM MP_TAC
12805 THEN DISCH_THEN (LABEL_TAC"YEU")
12806 THEN DISCH_TAC
12807 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
12808 ` (u:real^3)`]
12809 THEN POP_ASSUM MP_TAC
12810 THEN RESA_TAC
12811 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12812 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;` z:real^3`]
12813 THEN MRESA_TAC no_origin_aff_ge_is_aff_gt[`x:real^3`;`u:real^3`;`y:real^3`]
12814 THEN MRESA_TAC in_aff_gt_eq_azim[`x:real^3`;`y:real^3`;`u:real^3`;`z:real^3`;`w1:real^3`]
12815 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(SYM(th)))
12816 THEN MRESA_TAC point_in_yfan_and_point_in_xfan_indepent_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;` z:real^3`]
12817 THEN MRESA_TAC aff_ge_1_1_subset_aff_fan[`y:real^3`;`x:real^3`;`u:real^3`]
12818 THEN MRESA_TAC permutes_4points_collinear1[`x:real^3`;`y:real^3`;`u:real^3`;`w1:real^3`]
12819 THEN MRESA_TAC th3[`x:real^3`;`y:real^3`;`w1:real^3`]
12820 THEN STRIP_TAC
12821 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`y:real^3`;`z:real^3`;`w1:real^3`]
12822 THEN MRESA_TAC aff_ge_2_1_is_exists_point_inaff_ge_1_2[`x:real^3`;`y:real^3`;`z:real^3`;`w1:real^3`]
12823 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`x:real^3`;`u:real^3`;`w1:real^3`]
12824 THEN MP_TAC(SET_RULE`y IN aff_ge {x} {u}/\ aff_ge {x} {u, w1} =
12825       aff_gt {x} {u, w1} UNION aff_ge {x} {u} UNION aff_ge {x} {w1}==> y IN  aff_ge {x} {u, w1:real^3}`)
12826 THEN POP_ASSUM(fun th -> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
12827 THEN ASM_REWRITE_TAC[]
12828 THEN STRIP_TAC
12829 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`;`w1:real^3`;`y:real^3`]
12830 THEN MP_TAC(SET_RULE`(&1 - t) % y + t % z IN aff_ge {x} {y, w1}
12831  /\ aff_ge {x} {y, w1:real^3} SUBSET aff_ge {x} {u, w1}==> (&1 - t) % y + t % z IN aff_ge {x} {u, w1}`)
12832 THEN RESA_TAC
12833 THEN SUBGOAL_THEN`aff_ge {x} {u,w1} SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
12834 THENL[
12835 ASM_REWRITE_TAC[xfan; SUBSET;IN_ELIM_THM]
12836 THEN REPEAT STRIP_TAC
12837 THEN EXISTS_TAC`{u,w1:real^3}`
12838 THEN ASM_REWRITE_TAC[]
12839 THEN ASM_TAC THEN SET_TAC[IN];
12840 MP_TAC(SET_RULE`(&1 - t) % y + t % z IN aff_ge {x:real^3} {u, w1}/\ aff_ge {x} {u, w1} SUBSET xfan (x,V:real^3->bool,E)
12841 ==> (&1 - t) % y + t % z IN  xfan (x,V,E)`)
12842 THEN RESA_TAC
12843 THEN REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`t:real` )
12844 THEN POP_ASSUM MP_TAC
12845 THEN POP_ASSUM MP_TAC
12846 THEN REWRITE_TAC[yfan]
12847 THEN SET_TAC[]]);;
12848
12849
12850 let exists_edge_bounded_topological_component_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 u:real^3.
12851 FAN(x,V,E) 
12852 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12853 /\ fan80(x,V,E)
12854 /\ U IN topological_component_yfan (x,V,E)
12855 /\ z IN U
12856 /\ u IN V
12857 /\ y IN aff_ge {x} {u}
12858 /\ y IN xfan(x,V,E)
12859 /\ ~(y=x)
12860 /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
12861 ==> ?w. {u,w} IN E /\  z IN w_dart_fan x V E (x,u,w,sigma_fan x V E u w)`,
12862
12863 REPEAT STRIP_TAC
12864 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12865 THEN MRESA_TAC zpoint_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`z:real^3`]
12866 THEN MRESA_TAC v_subset_xfan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12867 THEN MRESA_TAC set_of_edge_subset_edges[`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`]
12868 THEN MP_TAC (SET_RULE`V SUBSET xfan (x,(V:real^3->bool),(E:(real^3->bool)->bool)) /\ set_of_edge u V E SUBSET V==> set_of_edge u V E SUBSET xfan (x,V,E)`)
12869 THEN RESA_TAC
12870 THEN MP_TAC(SET_RULE` z IN yfan (x,(V:real^3->bool),(E:(real^3->bool)->bool)) /\ set_of_edge u V E SUBSET xfan (x,V,E)/\ yfan (x,V,E)= (:real^3) DIFF xfan (x,V,E)
12871 ==> ~(z IN set_of_edge u V E)`)
12872 THEN ASM_REWRITE_TAC[yfan]
12873 THEN STRIP_TAC
12874 THEN MRESA_TAC exists_edge_component_yfan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (u:real^3)`; `(z:real^3)`]
12875 THEN POP_ASSUM MP_TAC
12876 THEN DISCH_THEN(LABEL_TAC"YEU")
12877 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
12878 THEN POP_ASSUM MP_TAC
12879 THEN ASM_REWRITE_TAC[]
12880 THEN STRIP_TAC
12881 THEN EXISTS_TAC`w:real^3`
12882 THEN ASM_REWRITE_TAC[w_dart_fan]
12883 THEN FIND_ASSUM MP_TAC(`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)`)
12884 THEN DISCH_TAC
12885 THEN  POP_ASSUM(fun th->  MP_TAC(ISPEC`u:real^3` th))
12886 THEN FIND_ASSUM MP_TAC(`(u:real^3) IN V`)
12887 THEN DISCH_TAC
12888 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
12889 THEN STRIP_TAC
12890 THEN ASM_REWRITE_TAC[wedge;IN_ELIM_THM]
12891 THEN MRESA_TAC point_in_yfan_and_point_in_xfan_indepent_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;` z:real^3`]
12892 THEN MRESA_TAC aff_ge_1_1_subset_aff_fan[`y:real^3`;`x:real^3`;`u:real^3`]
12893 THEN MRESA_TAC permutes_4points_collinear[`x:real^3`;`y:real^3`;`u:real^3`;`z:real^3`]
12894 THEN MRESA_TAC not_azim_points_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` U:real^3->bool`;`y:real^3`;`z:real^3`;`u:real^3`]
12895 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)
12896 THEN MRESA_TAC azim[`x:real^3`;`u:real^3`;`w:real^3`;`z:real^3`]
12897 THEN REMOVE_ASSUM_TAC
12898 THEN MP_TAC(REAL_ARITH`&0<= azim x u w z ==> azim x u  w z = &0 \/ &0< azim x u w (z:real^3)`)
12899 THEN RESA_TAC
12900 THENL(*1*)[ MRESA_TAC AZIM_COMPL_EQ_0[`x:real^3`;`u:real^3`;`w:real^3`;`z:real^3`];(*1*)
12901 ABBREV_TAC`w1=sigma_fan x V E u w:real^3`
12902 THEN SUBGOAL_THEN`~(set_of_edge u V E = {w:real^3})`ASSUME_TAC
12903 THENL(*2*)[
12904 STRIP_TAC
12905 THEN FIND_ASSUM (MP_TAC)`CARD (set_of_edge (u:real^3) V E) > 1`
12906 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
12907 THEN SUBGOAL_THEN `FINITE {(w:real^3)}` ASSUME_TAC
12908 THENL (*3*)[SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
12909                  IN_INSERT; NOT_IN_EMPTY];
12910 MRESAL_TAC CARD_PSUBSET[`{}:real^3->bool`;`{w:real^3}`][SET_RULE`{} PSUBSET {w}`]
12911 THEN MRESAL_TAC CARD_DELETE[`w:real^3`;`{w:real^3}`][SET_RULE`w IN {w}/\ {w} DELETE w= {}`]
12912 THEN POP_ASSUM MP_TAC
12913 THEN POP_ASSUM MP_TAC
12914 THEN REWRITE_TAC[CARD_CLAUSES]
12915 THEN ARITH_TAC];(*2*)
12916
12917 MRESA_TAC SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`w:real^3`]
12918 THEN POP_ASSUM MP_TAC
12919 THEN DISCH_THEN(LABEL_TAC"LINH")
12920 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w1:real^3`;`u:real^3`]
12921 THEN POP_ASSUM MP_TAC
12922 THEN RESA_TAC
12923 THEN MRESA_TAC not_azim_points_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` U:real^3->bool`;`y:real^3`;`z:real^3`;`u:real^3`]
12924 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w1:real^3`)
12925 THEN REMOVE_THEN "YEU" (fun th-> MRESAL1_TAC th`w1:real^3`[azim1])
12926 THEN MP_TAC(REAL_ARITH`&2 * pi - azim x u z w <= &2 * pi - azim x u z w1==> azim x u z (w1:real^3) <=  azim x u z w`)
12927 THEN RESA_TAC
12928 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`u:real^3`;`z:real^3`;`w1:real^3`;` w:real^3`]
12929 THEN MP_TAC(REAL_ARITH` azim x u z w = azim x u z w1 + azim x u w1 w  /\ &0<= azim x u z w1
12930 ==> &2 * pi - azim x u z w <= &2 * pi - azim x u w1 (w:real^3)`)
12931 THEN ASM_REWRITE_TAC[azim]
12932 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(SYM(th)))
12933 THEN POP_ASSUM MP_TAC
12934 THEN DISCH_THEN(LABEL_TAC"BE")
12935 THEN SUBGOAL_THEN`~(azim x u w1 (w:real^3)= &0)` ASSUME_TAC
12936 THENL[ STRIP_TAC
12937 THEN MRESA_TAC UNIQUE_AZIM_0_POINT_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w1:real^3)`;`w:real^3`];
12938
12939 MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`z:real^3`;`w:real^3`]
12940 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`u:real^3`;`w1:real^3`;`w:real^3`]
12941 THEN STRIP_TAC
12942 THEN MP_TAC(REAL_ARITH`&2 * pi - azim x u z w <= &2 * pi - azim x u w1 w
12943  ==> &2 * pi - azim x u z w < &2 * pi - azim x u w1 w \/  azim x u z w = azim x u w1 (w:real^3)`)
12944 THEN RESA_TAC
12945 THEN REMOVE_THEN"BE" MP_TAC
12946 THEN ASM_REWRITE_TAC[REAL_ARITH`A+B=B<=>A= &0`]]]]);;
12947
12948
12949
12950
12951
12952 let aff_gt_in_w_dart_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) u:real^3 w:real^3 y:real^3.
12953 FAN(x,V,E) /\ {u,w} IN E
12954 /\ y IN w_dart_fan x V E ((x:real^3),(u:real^3),(w:real^3),(sigma_fan x V E u w:real^3)) 
12955 /\ fan80(x,V,E)
12956 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
12957 ==> aff_gt {x} {u,y} SUBSET w_dart_fan x V E ((x:real^3),(u:real^3),(w:real^3),(sigma_fan x V E u w:real^3)) `,
12958 REPEAT STRIP_TAC
12959 THEN POP_ASSUM MP_TAC
12960 THEN POP_ASSUM MP_TAC
12961 THEN POP_ASSUM MP_TAC
12962 THEN DISCH_THEN(LABEL_TAC "CON")
12963 THEN DISCH_THEN(LABEL_TAC "BE")
12964 THEN DISCH_THEN(LABEL_TAC"EM")
12965 THEN USE_THEN "BE" MP_TAC
12966 THEN REWRITE_TAC[fan80]
12967 THEN DISCH_TAC
12968 THEN POP_ASSUM (fun th->   MRESA_TAC th [`u:real^3`;`w:real^3`]
12969 THEN MRESA_TAC th [`v:real^3`;`u:real^3`])
12970 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
12971 ` (v:real^3)`]
12972 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
12973 ` (u:real^3)`]
12974 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `u:real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
12975 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge u V E = {w} \/ ~(set_of_edge u V E = {w:real^3})`)
12976 THENL[
12977 MRESA_TAC CARD_SING[`w:real^3`; `(set_of_edge u V E):real^3->bool`]
12978 THEN POP_ASSUM MP_TAC
12979 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
12980 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN ARITH_TAC;
12981 REMOVE_THEN "CON" MP_TAC
12982 THEN ASM_REWRITE_TAC[SUBSET; w_dart_fan;wedge;IN_ELIM_THM;]
12983 THEN STRIP_TAC THEN GEN_TAC THEN STRIP_TAC
12984 THEN MRESA_TAC aff_gt_inter_aff_gt [`(x:real^3)`;`(u:real^3)`;`(y:real^3)`]
12985 THEN MP_TAC(SET_RULE`aff_gt {x} {u, y} = aff_gt {x, u} {y} INTER aff_gt {x, y} {u}
12986 /\ x' IN aff_gt {x} {u, y:real^3} ==> x' IN aff_gt {x,u} {y}`) THEN RESA_TAC
12987 THEN MRESA_TAC aff_gt_imp_not_collinear[`x:real^3`;`y:real^3`;`u:real^3`; `x':real^3`]
12988 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`x':real^3`;`y:real^3`;]]);;
12989
12990
12991 let not_empty_rcone_fan_inter_aff_gt=prove(`!x v u:real^3 h:real.
12992 ~collinear {x,v,u} /\ &0< h /\ h<= pi==>
12993 ~(rcone_fan x v (cos h) INTER aff_gt {x} {v, u}={})`,
12994 REPEAT STRIP_TAC
12995 THEN POP_ASSUM MP_TAC
12996 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
12997 THEN SUBGOAL_THEN`~(norm((v:real^3)-(x:real^3))= &0)` ASSUME_TAC
12998 THENL(*1*)[ASM_REWRITE_TAC[NORM_EQ_0;VECTOR_ARITH`v-x=vec 0<=> x=v`];
12999 ASM_REWRITE_TAC[rcone_fan;SET_RULE`~(A={})<=> ?y. y IN A`;INTER;IN_ELIM_THM]
13000 THEN DISJ_CASES_TAC(REAL_ARITH`(v - x) dot (u - x:real^3) <= &0 \/ &0< (v - x) dot (u - x)`)
13001 THENL(*2*)[ABBREV_TAC`s1= min h (pi / &2) / &2:real`
13002 THEN MP_TAC(REAL_ARITH` &0< pi /\ min h (pi / &2) / &2 =s1 /\ &0< h:real ==> &0<= s1 /\ &0<s1 /\ s1< h/\ s1<pi/ &2`)
13003 THEN ASM_REWRITE_TAC[PI_WORKS]
13004 THEN STRIP_TAC
13005 THEN EXISTS_TAC`sin (s1) % (e1_fan x v u) + (cos s1) %(e3_fan x v u)+x :real^3 `
13006 THEN REWRITE_TAC[dist;vector_norm;VECTOR_ARITH`(B+C+A)-A=(B+C:real^3)`; DOT_LADD;DOT_RADD;DOT_RMUL;DOT_LMUL;]
13007 THEN MRESAL_TAC properties_coordinate[`x:real^3`;`v:real^3`;`u:real^3`][orthonormal]
13008 THEN ONCE_REWRITE_TAC[DOT_SYM]
13009 THEN ASSUME_TAC(ISPEC`s1:real`SIN_CIRCLE)
13010 THEN ASM_REWRITE_TAC[]
13011 THEN REDUCE_ARITH_TAC
13012 THEN ASM_REWRITE_TAC[REAL_ARITH`sin s * sin s + cos s * cos s =(sin s) pow 2 + (cos s) pow 2`;e3_fan;DOT_RMUL; ]
13013 THEN ONCE_REWRITE_TAC[GSYM vector_norm;]
13014 THEN REWRITE_TAC[DOT_SQUARE_NORM;]
13015 THEN MRESAL1_TAC  SQRT_POW_2`&1`[REAL_ARITH`a pow 2 = a * a`;REAL_ARITH`&0<= &1`;]
13016 THEN POP_ASSUM MP_TAC
13017 THEN MRESAL_TAC SQRT_MUL[`&1`;`&1`][REAL_ARITH`&0<= &1`;]
13018 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th); REAL_ARITH`&1* &1= &1`])
13019 THEN RESA_TAC
13020 THEN REDUCE_ARITH_TAC
13021 THEN MP_TAC(ISPEC`norm((v:real^3)-(x:real^3))`REAL_MUL_LINV)
13022 THEN REWRITE_TAC[REAL_ARITH`A*B*D *D=(B*D) *D *A`;REAL_ARITH`A>B<=> B<A`]
13023 THEN RESA_TAC
13024 THEN REDUCE_ARITH_TAC
13025 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
13026 THEN STRIP_TAC
13027 THENL(*3*)[ MATCH_MP_TAC REAL_LT_LMUL
13028 THEN MP_TAC(REAL_ARITH`~(norm (v - x:real^3) = &0)/\ &0 <= norm (v - x)==> &0< norm (v - x) `)
13029 THEN RESA_TAC
13030 THEN MATCH_MP_TAC COS_MONO_LT
13031 THEN ASM_REWRITE_TAC[];(*3*)
13032 MRESA_TAC condition1_to_in_aff_gt_by_angle[`x:real^3`;`v:real^3`;`u:real^3`;`s1:real`]
13033 THEN POP_ASSUM MP_TAC
13034 THEN REWRITE_TAC[e3_fan]](*3*);(*2*)
13035 SUBGOAL_THEN`&0<(atn ((norm ((v - x) cross (u - x))) * inv((v - x) dot (u - x:real^3))))` ASSUME_TAC
13036 THENL(*3*)[MP_TAC(ISPEC`(v - x) dot (u - x:real^3)`REAL_LT_INV)
13037 THEN RESA_TAC
13038 THEN ASSUME_TAC(PI_WORKS)
13039 THEN MP_TAC(REAL_ARITH`&0< pi ==> --(pi / &2) < &0`)
13040 THEN RESA_TAC
13041 THEN MRESAL_TAC  ATN_MONO_LT[`&0:real`;` (norm ((v - x) cross (u - x)) * inv ((v - x) dot (u - x))):real`][ ATN_0]
13042 THEN POP_ASSUM MATCH_MP_TAC
13043 THEN MATCH_MP_TAC REAL_LT_MUL
13044 THEN ASM_REWRITE_TAC[]
13045 THEN SUBGOAL_THEN`~(norm((v - x) cross (u - x:real^3))= &0)` ASSUME_TAC
13046 THENL(*4*)[
13047 ASM_REWRITE_TAC[NORM_EQ_0]
13048 THEN MP_TAC(ISPECL[`v-x:real^3`;`u-x:real^3`]CROSS_EQ_0)
13049 THEN ONCE_REWRITE_TAC[GSYM COLLINEAR_3;]
13050 THEN RESA_TAC
13051 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
13052 THEN ASM_REWRITE_TAC[];(*4*)
13053
13054 POP_ASSUM MP_TAC
13055 THEN MP_TAC(ISPEC`(v - x) cross (u - x:real^3)`NORM_POS_LE)
13056 THEN REAL_ARITH_TAC](*4*);(*3*)
13057
13058  ASSUME_TAC(ISPEC`(norm ((v - x) cross (u - x)) * inv ((v - x) dot (u - x))):real`ATN_BOUNDS)
13059 THEN ABBREV_TAC`s2= atn ((norm ((v - x) cross (u - x))) * inv((v - x) dot (u - x))):real`
13060 THEN ABBREV_TAC`s1= min (h:real) (s2:real) / &2`
13061 THEN MP_TAC(REAL_ARITH`&0< h /\ s1= min (h:real) (s2) / &2  /\ &0< pi /\  &0< s2 /\ s2 < pi/ &2==> &0<= s1 /\ &0<s1 /\ s1<pi/ &2 /\ s1<h/\  s1< s2
13062 `)
13063 THEN REWRITE_TAC[PI_WORKS]
13064 THEN RESA_TAC
13065 THEN EXISTS_TAC`sin (s1) % (e1_fan x v u) + (cos s1) %(e3_fan x v u)+x :real^3 `
13066 THEN REWRITE_TAC[dist;vector_norm;VECTOR_ARITH`(B+C+A)-A=(B+C:real^3)`; DOT_LADD;DOT_RADD;DOT_RMUL;DOT_LMUL;]
13067 THEN MRESAL_TAC properties_coordinate[`x:real^3`;`v:real^3`;`u:real^3`][orthonormal]
13068 THEN ONCE_REWRITE_TAC[DOT_SYM]
13069 THEN ASSUME_TAC(ISPEC`s1:real`SIN_CIRCLE)
13070 THEN ASM_REWRITE_TAC[]
13071 THEN REDUCE_ARITH_TAC
13072 THEN ASM_REWRITE_TAC[REAL_ARITH`sin s * sin s + cos s * cos s =(sin s) pow 2 + (cos s) pow 2`;e3_fan;DOT_RMUL; ]
13073 THEN ONCE_REWRITE_TAC[GSYM vector_norm;]
13074 THEN REWRITE_TAC[DOT_SQUARE_NORM;]
13075 THEN MRESAL1_TAC  SQRT_POW_2`&1`[REAL_ARITH`a pow 2 = a * a`;REAL_ARITH`&0<= &1`;]
13076 THEN POP_ASSUM MP_TAC
13077 THEN MRESAL_TAC SQRT_MUL[`&1`;`&1`][REAL_ARITH`&0<= &1`;]
13078 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th); REAL_ARITH`&1* &1= &1`])
13079 THEN RESA_TAC
13080 THEN REDUCE_ARITH_TAC
13081 THEN MP_TAC(ISPEC`norm((v:real^3)-(x:real^3))`REAL_MUL_LINV)
13082 THEN REWRITE_TAC[REAL_ARITH`A*B*D *D=(B*D) *D *A`;REAL_ARITH`A>B<=> B<A`]
13083 THEN RESA_TAC
13084 THEN REDUCE_ARITH_TAC
13085 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
13086 THEN STRIP_TAC
13087 THENL(*4*)[ MATCH_MP_TAC REAL_LT_LMUL
13088 THEN MP_TAC(REAL_ARITH`~(norm (v - x:real^3) = &0)/\ &0 <= norm (v - x)==> &0< norm (v - x) `)
13089 THEN RESA_TAC
13090 THEN MATCH_MP_TAC COS_MONO_LT
13091 THEN ASM_REWRITE_TAC[];(*4*)
13092 MRESA_TAC condition_to_in_aff_gt_by_angle[`x:real^3`;`v:real^3`;`u:real^3`;`s1:real`]
13093 THEN POP_ASSUM MP_TAC
13094 THEN REWRITE_TAC[e3_fan]]]]]);;
13095
13096
13097
13098
13099
13100
13101 let condition_rw_dart_fan_inter_aff_gt_is_not_empty=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 z:real^3 h:real.
13102 FAN(x,V,E)/\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
13103 /\ fan80(x,V,E) /\ ~collinear {x,v,z}
13104 /\ {v,u} IN E /\ z IN w_dart_fan x V E (x,v,u,sigma_fan x V E v u)
13105 /\ &0<h /\ h<= pi
13106 ==>
13107 ~(rw_dart_fan x V E ((x:real^3),(v:real^3),(u:real^3),sigma_fan x V E v u ) (cos(h)) INTER aff_gt {x} {v,z}={})`,
13108
13109 REPEAT STRIP_TAC
13110 THEN POP_ASSUM MP_TAC
13111 THEN MRESA_TAC aff_gt_in_w_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`z:real^3`]
13112 THEN MP_TAC(SET_RULE`aff_gt {x} {v, z} SUBSET w_dart_fan x V E (x,v,u,sigma_fan x V E v u) ==>
13113 (w_dart_fan x V E (x,v,u,sigma_fan x V E v u) INTER
13114       rcone_fan x v (cos h)) INTER
13115      aff_gt {x} {v, z}=  rcone_fan x v (cos h) INTER
13116      aff_gt {x} {v, z:real^3}`)
13117 THEN RESA_TAC
13118 THEN ASM_REWRITE_TAC[rw_dart_fan;SET_RULE`~(A={})<=> ?y. y IN A`]
13119 THEN MRESA_TAC not_empty_rcone_fan_inter_aff_gt[`x:real^3`;`v:real^3`;`z:real^3`;`h:real`]
13120 THEN POP_ASSUM MP_TAC
13121 THEN SET_TAC[]);;
13122
13123
13124
13125
13126 let exists_edge_rw_dart_fan_inter_aff_gt_not_empty_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 u:real^3.
13127 FAN(x,V,E) 
13128 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
13129 /\ fan80(x,V,E)
13130 /\ U IN topological_component_yfan (x,V,E)
13131 /\ z IN U
13132 /\ u IN V
13133 /\ y IN aff_ge {x} {u}
13134 /\ y IN xfan(x,V,E)
13135 /\ ~(y=x)
13136 /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
13137 ==> ?w. {u,w} IN E /\
13138 (!h. &0<h /\ h<= pi
13139 ==> ~((rw_dart_fan x V E (x,u,w,sigma_fan x V E u w) (cos h)) INTER aff_gt {x} {u,z}={}))`,
13140
13141 REPEAT STRIP_TAC
13142 THEN MRESA_TAC exists_edge_bounded_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`u:real^3`]
13143 THEN EXISTS_TAC`w:real^3`
13144 THEN ASM_REWRITE_TAC[]
13145 THEN GEN_TAC THEN STRIP_TAC
13146 THEN MATCH_MP_TAC condition_rw_dart_fan_inter_aff_gt_is_not_empty
13147 THEN ASM_REWRITE_TAC[]
13148 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
13149 THEN MRESA_TAC point_in_yfan_and_point_in_xfan_indepent_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;` z:real^3`]
13150 THEN MRESA_TAC aff_ge_1_1_subset_aff_fan[`y:real^3`;`x:real^3`;`u:real^3`]
13151 THEN MRESA_TAC permutes_4points_collinear[`x:real^3`;`y:real^3`;`u:real^3`;`z:real^3`]);;
13152
13153
13154
13155
13156
13157 let exists_edge_rw_dart_fan_inter_topological_component_not_empty_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 u:real^3.
13158 FAN(x,V,E) 
13159 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
13160 /\ fan80(x,V,E)
13161 /\ U IN topological_component_yfan (x,V,E)
13162 /\ z IN U
13163 /\ u IN V
13164 /\ y IN aff_ge {x} {u}
13165 /\ y IN xfan(x,V,E)
13166 /\ ~(y=x)
13167 /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
13168
13169 ==> ?w. {u,w} IN E 
13170 /\(!h.  &0<h /\ h<= pi
13171 ==> ~((rw_dart_fan x V E (x,u,w,sigma_fan x V E u w) (cos h)) INTER U={}))`,
13172
13173 REPEAT STRIP_TAC
13174 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
13175 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;` z:real^3`]
13176 THEN MP_TAC(SET_RULE`~(x=z) /\ ~(y=x)==> DISJOINT {x} {y,z:real^3}`)
13177 THEN RESA_TAC
13178 THEN MRESA_TAC aff_gt_subset_component_y_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`]
13179 THEN MRESA_TAC exists_edge_rw_dart_fan_inter_aff_gt_not_empty_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`u:real^3`]
13180 THEN POP_ASSUM MP_TAC
13181 THEN DISCH_THEN(LABEL_TAC"YEU")
13182 THEN EXISTS_TAC `w:real^3`
13183 THEN ASM_REWRITE_TAC[]
13184 THEN GEN_TAC THEN STRIP_TAC
13185 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th`h:real`)
13186 THEN MATCH_MP_TAC(SET_RULE`~(rw_dart_fan x V E (x,u,w,sigma_fan x V E u w) (cos h) INTER aff_gt {x} {u, z} =  {})
13187 /\ aff_gt {x:real^3} {y, z} SUBSET U /\ aff_gt {x} {u, z} =aff_gt {x} {y, z} 
13188 ==> ~(rw_dart_fan x V E (x,u,w,sigma_fan x V E u w) (cos h) INTER U = {})`)
13189 THEN ASM_REWRITE_TAC[]
13190 THEN MATCH_MP_TAC aff_gt_1_2_scale_fan
13191 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
13192 THEN MRESA_TAC aff_ge_1_1_subset_aff_fan[`y:real^3`;`x:real^3`;`u:real^3`]
13193 THEN MRESA_TAC point_in_yfan_and_point_in_xfan_indepent_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;` z:real^3`]
13194 THEN MRESA_TAC permutes_4points_collinear[`x:real^3`;`y:real^3`;`u:real^3`;`z:real^3`]
13195 THEN ASM_REWRITE_TAC[]
13196 THEN FIND_ASSUM MP_TAC `y IN aff_ge {x} {u:real^3}`
13197 THEN FIND_ASSUM MP_TAC ` ~(x=u:real^3)`
13198 THEN FIND_ASSUM MP_TAC ` ~(y=x:real^3)`
13199 THEN REPEAT REMOVE_ASSUM_TAC
13200 THEN STRIP_TAC
13201 THEN STRIP_TAC
13202 THEN MRESAL_TAC AFF_GE_1_1[`x:real^3`;`u:real^3`][IN_ELIM_THM]
13203 THEN STRIP_TAC
13204 THEN EXISTS_TAC`t2:real`
13205 THEN ASM_REWRITE_TAC[VECTOR_ARITH` (t1 % x + t2 % u) - x= ((t1+t2)- &1) %x+ t2%(u-x)`;]
13206 THEN POP_ASSUM MP_TAC
13207 THEN POP_ASSUM MP_TAC
13208 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0< t2`)
13209 THEN RESA_TAC
13210 THEN REDUCE_ARITH_TAC
13211 THEN STRIP_TAC
13212 THEN ASM_REWRITE_TAC[]
13213 THEN REDUCE_VECTOR_TAC
13214 THEN ASM_REWRITE_TAC[]
13215 THEN VECTOR_ARITH_TAC);;
13216
13217
13218
13219
13220
13221
13222 let  exists_dart_leads_into_edge_eq_topological_component_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 u:real^3.
13223 FAN(x,V,E) 
13224 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
13225 /\ fan80(x,V,E)
13226 /\ U IN topological_component_yfan (x,V,E)
13227 /\ z IN U
13228 /\ u IN V
13229 /\ y IN aff_ge {x} {u}
13230 /\ y IN xfan(x,V,E)
13231 /\ ~(y=x)
13232 /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan(x,V,E))
13233 ==> ?w. {u,w} IN E /\ dart_leads_into x V E u w = U`,
13234
13235 REPEAT STRIP_TAC
13236 THEN MRESA_TAC exists_edge_rw_dart_fan_inter_topological_component_not_empty_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`u:real^3`;]
13237 THEN POP_ASSUM MP_TAC
13238 THEN DISCH_THEN(LABEL_TAC"MA")
13239 THEN MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
13240 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"EM")
13241 THEN MRESA_TAC DART_LEADS_INTO[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
13242 `u:real^3`;`w:real^3`;]
13243 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
13244 THEN MRESA_TAC rw_dart_avoids_fan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
13245 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"OI")
13246 THEN MP_TAC(REAL_ARITH`&1> h' /\ h' > &0==> -- &1 < h' /\ h'< &1 /\ -- &1 <= h' /\ h'<= &1/\ &0 < h' /\ h' <= &1`) THEN RESA_TAC
13247 THEN MRESA1_TAC ACS_BOUNDS_LT`h':real`
13248 THEN MRESAL_TAC ACS_MONO_LT[`&0`;`h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
13249 THEN MRESA1_TAC COS_ACS `h':real`
13250 THEN ABBREV_TAC`h1= min (h:real) (acs h')/ &2`
13251 THEN MP_TAC(REAL_ARITH`h1= min (h:real) (acs h')/ &2 /\ &0<h /\ &0< acs h' /\ acs h'< pi/ &2==> &0< h1 /\ h1< h /\ h1<pi/ &2/\ h1< acs h' /\ acs h' <= pi /\ &0<= h1/\ h1<= pi`)
13252 THEN ASM_REWRITE_TAC[PI_WORKS] THEN STRIP_TAC
13253 THEN MRESAL_TAC COS_MONO_LT[`h1:real`;`acs h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
13254 THEN MP_TAC(REAL_ARITH`h'< cos h1==> h'<= cos h1`) THEN RESA_TAC
13255 THEN REMOVE_THEN "EM"(fun th-> MRESAL1_TAC th `h1:real`[SET_RULE`~(A={})<=> ?y. y IN A`])
13256 THEN REMOVE_THEN "YEU"(fun th-> MRESA_TAC th [`h1:real`;`y':real^3`])
13257 THEN EXISTS_TAC `w:real^3`
13258 THEN ASM_REWRITE_TAC[]
13259 THEN POP_ASSUM MP_TAC
13260 THEN POP_ASSUM MP_TAC
13261 THEN DISCH_THEN(LABEL_TAC "EM")
13262 THEN DISCH_TAC
13263 THEN REMOVE_THEN "EM" MP_TAC
13264 THEN POP_ASSUM(fun th -> REWRITE_TAC[SYM(th);]) 
13265 THEN DISCH_TAC
13266 THEN MRESA_TAC expand_element_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`z:real^3`]
13267 THEN REMOVE_THEN "MA"(fun th-> MRESA1_TAC th `h1:real`)
13268 THEN MP_TAC(SET_RULE`rw_dart_fan x V E (x,u,w,sigma_fan x V E u w) (cos h1) SUBSET
13269       connected_component (yfan (x,V,E)) y'/\
13270 ~(rw_dart_fan x V E (x,u,w,sigma_fan x V E u w) (cos h1) INTER
13271         connected_component (yfan (x,V,E)) z =
13272         {})
13273 ==>
13274 ~(   connected_component (yfan (x,V,E)) y' INTER
13275         connected_component (yfan (x,V,E)) z =
13276         {})`)
13277 THEN ASM_REWRITE_TAC[]
13278 THEN REWRITE_TAC[CONNECTED_COMPONENT_OVERLAP]
13279 THEN SET_TAC[]);;
13280
13281
13282 (*CASE 2*)
13283
13284
13285
13286 let not_azim_points1_in_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 u:real^3 w:real^3.
13287 FAN(x,V,E) 
13288 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
13289 /\ fan80(x,V,E)
13290 /\ U IN topological_component_yfan (x,V,E)
13291 /\ z IN U
13292 /\ {u,w} IN E
13293 /\ y IN aff_gt {x} {u,w}
13294 /\ y IN xfan (x,V,E)
13295 /\ ~(y=x)
13296  /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
13297 ==>  ~(azim x y z w= &0)`,
13298
13299 REPEAT STRIP_TAC
13300 THEN POP_ASSUM MP_TAC
13301 THEN POP_ASSUM MP_TAC
13302 THEN DISCH_THEN (LABEL_TAC"YEU")
13303 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
13304 ` (u:real^3)`]
13305 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
13306 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;` z:real^3`]
13307 THEN MRESA_TAC point_in_yfan_and_point_in_xfan_indepent_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;` z:real^3`]
13308 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`w:real^3`;`u:real^3`;`y:real^3`]
13309 THEN POP_ASSUM MP_TAC
13310 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;SET_RULE`{A,B}={B,A}`]
13311 THEN ASM_REWRITE_TAC[]
13312 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;]
13313 THEN STRIP_TAC
13314 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`y:real^3`;`z:real^3`;`w:real^3`]
13315 THEN STRIP_TAC
13316 THEN MRESA_TAC th3[`x:real^3`;`y:real^3`;`w:real^3`]
13317 THEN MRESA_TAC aff_ge_2_1_is_exists_point_inaff_ge_1_2[`x:real^3`;`y:real^3`;`z:real^3`;`w:real^3`]
13318 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`]
13319 THEN MP_TAC(SET_RULE`aff_ge {x} {u, w} =
13320       aff_gt {x} {u, w} UNION aff_ge {x} {u} UNION aff_ge {x} {w}
13321 /\ y IN aff_gt {x} {u,w}==> y IN aff_ge {x:real^3} {u,w}`)
13322 THEN POP_ASSUM(fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
13323 THEN RESA_TAC
13324 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`; `w:real^3`;`y:real^3`]
13325 THEN SUBGOAL_THEN`aff_ge {x} {u,w} SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
13326 THENL[
13327 ASM_REWRITE_TAC[xfan; SUBSET;IN_ELIM_THM]
13328 THEN REPEAT STRIP_TAC
13329 THEN EXISTS_TAC`{u,w:real^3}`
13330 THEN ASM_REWRITE_TAC[]
13331 THEN ASM_TAC THEN SET_TAC[IN];
13332 MP_TAC(SET_RULE`(&1 - t) % y + t % z IN aff_ge {x:real^3} {y, w}/\ aff_ge {x} {y, w} SUBSET aff_ge {x} {u, w}  /\aff_ge {x} {u, w} SUBSET xfan (x,V:real^3->bool,E)
13333 ==> (&1 - t) % y + t % z IN  xfan (x,V,E)`)
13334 THEN RESA_TAC
13335 THEN REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`t:real` )
13336 THEN POP_ASSUM MP_TAC
13337 THEN POP_ASSUM MP_TAC
13338 THEN ASM_REWRITE_TAC[yfan]
13339 THEN SET_TAC[]]);;
13340
13341
13342
13343 let not_azim_points2_in_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 u:real^3 w:real^3.
13344 FAN(x,V,E) 
13345 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
13346 /\ fan80(x,V,E)
13347 /\ U IN topological_component_yfan (x,V,E)
13348 /\ z IN U
13349 /\ {u,w} IN E
13350 /\ y IN aff_gt {x} {u,w}
13351 /\ y IN xfan (x,V,E)
13352 /\ ~(y=x)
13353  /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan (x,V,E))
13354 ==>  ~(azim x y z u= &0)`,
13355
13356 REPEAT STRIP_TAC
13357 THEN POP_ASSUM MP_TAC
13358 THEN REWRITE_TAC[]
13359 THEN MATCH_MP_TAC not_azim_points1_in_yfan
13360 THEN EXISTS_TAC`V:real^3->bool`
13361 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13362 THEN EXISTS_TAC`U:real^3->bool`
13363 THEN EXISTS_TAC`w:real^3`
13364 THEN ASM_REWRITE_TAC[]
13365 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13366 THEN ASM_REWRITE_TAC[]);;
13367
13368
13369
13370
13371
13372
13373 let condition_cross_dot_4point=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13374               let a1 = y - x in
13375               let a2 = z - x in
13376               let a3 = v - x in
13377               let a4 = u - x in
13378               let va = a1 cross a2 in
13379               let vb = a3 cross a4 in
13380               let v3 = va cross vb + x in 
13381  ~collinear {x,v,u}
13382 /\ &0<(a1 cross a2) dot a4 /\  &0 < --((a1 cross a2) dot a3)
13383 ==> v3 IN aff_gt {x} {v,u}`,
13384 REPEAT GEN_TAC
13385 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13386 THEN ABBREV_TAC`a1=(y-x):real^3`
13387 THEN ABBREV_TAC`a2=(z-x):real^3`
13388 THEN ABBREV_TAC`a3=(v-x) :real^3`
13389 THEN ABBREV_TAC`a4=u-x:real^3`
13390 THEN ABBREV_TAC`va=a1 cross a2:real^3`
13391 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
13392 THEN ABBREV_TAC`v3= (va:real^3) cross (vb:real^3)+(x:real^3)`
13393 THEN REPEAT STRIP_TAC
13394 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
13395 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
13396 THEN EXISTS_TAC`&1-(va:real^3) dot (a4:real^3)+va dot (a3:real^3)`
13397 THEN EXISTS_TAC`((va:real^3) dot (a4:real^3))`
13398 THEN EXISTS_TAC`(--((va:real^3) dot (a3:real^3)))`
13399 THEN ASM_REWRITE_TAC[REAL_ARITH` (&1 - va dot a4 + va dot a3) + (va dot a4) + --(va dot a3) = &1`]
13400 THEN EXPAND_TAC"v3"
13401 THEN EXPAND_TAC"vb" 
13402 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_ARITH`A+ B + --U%C=A +B-U%C:real^3`]
13403 THEN EXPAND_TAC"a3" 
13404 THEN EXPAND_TAC"a4" 
13405 THEN VECTOR_ARITH_TAC);;
13406
13407
13408
13409
13410 let aff_gt_2_1_crossr_dot_4point=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13411               let a1 = y - x in
13412               let a2 = z - x in
13413               let a3 = v - x in
13414               let a4 = u - x in
13415  ~collinear {x,y,z}
13416 /\ u IN aff_gt {x,y} {z}
13417 /\ &0<(a1 cross a2) dot a3 
13418 ==> &0<(a1 cross a4) dot a3 `,
13419 REPEAT GEN_TAC
13420 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13421 THEN REPEAT STRIP_TAC
13422 THEN POP_ASSUM MP_TAC
13423 THEN POP_ASSUM MP_TAC
13424 THEN MRESA_TAC th3[`x:real^3`;`y:real^3`;`z:real^3`]
13425 THEN MRESAL_TAC AFF_GT_2_1[`x:real^3`;`y:real^3`;`z:real^3`][IN_ELIM_THM]
13426 THEN REPEAT STRIP_TAC
13427 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % y + w % z) - x=((u'+v'+w) - &1) % x + v' % (y-x) + w % (z - x)`;REAL_ARITH`&1- &1= &0`]
13428 THEN REDUCE_VECTOR_TAC
13429 THEN REWRITE_TAC[CROSS_RMUL;CROSS_RADD;CROSS_REFL;]
13430 THEN REDUCE_VECTOR_TAC
13431 THEN REWRITE_TAC[DOT_LMUL]
13432 THEN MATCH_MP_TAC REAL_LT_MUL
13433 THEN ASM_REWRITE_TAC[]);;
13434
13435
13436 let aff_gt_2_1_rcross_dot_4pointl=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13437               let a1 = y - x in
13438               let a2 = z - x in
13439               let a3 = v - x in
13440               let a4 = u - x in
13441  ~collinear {x,y,z}
13442 /\ u IN aff_gt {x,z} {y}
13443 /\ &0<(a1 cross a2) dot a3 
13444 ==> &0<(a4 cross a2) dot a3 `,
13445 REPEAT GEN_TAC
13446 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13447 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13448 THEN REPEAT STRIP_TAC
13449 THEN POP_ASSUM MP_TAC
13450 THEN POP_ASSUM MP_TAC
13451 THEN MRESA_TAC th3[`x:real^3`;`z:real^3`;`y:real^3`]
13452 THEN MRESAL_TAC AFF_GT_2_1[`x:real^3`;`z:real^3`;`y:real^3`][IN_ELIM_THM]
13453 THEN REPEAT STRIP_TAC
13454 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % z + w % y) - x=((u'+v'+w) - &1) % x + v' % (z-x) + w % (y - x)`;REAL_ARITH`&1- &1= &0`]
13455 THEN REDUCE_VECTOR_TAC
13456 THEN REWRITE_TAC[CROSS_LMUL;CROSS_LADD;CROSS_REFL;]
13457 THEN REDUCE_VECTOR_TAC
13458 THEN REWRITE_TAC[DOT_LMUL]
13459 THEN MATCH_MP_TAC REAL_LT_MUL
13460 THEN ASM_REWRITE_TAC[]);;
13461
13462
13463
13464
13465 let aff_gt_2_1_cross_dotr_4point=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13466               let a1 = y - x in
13467               let a2 = z - x in
13468               let a3 = v - x in
13469               let a4 = u - x in
13470  ~collinear {x,y,v}
13471 /\ u IN aff_gt {x,y} {v}
13472 /\ &0<(a1 cross a2) dot a3 
13473 ==> &0<(a1 cross a2) dot a4 `,
13474 REPEAT GEN_TAC
13475 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13476 THEN REPEAT STRIP_TAC
13477 THEN POP_ASSUM MP_TAC
13478 THEN POP_ASSUM MP_TAC
13479 THEN MRESA_TAC th3[`x:real^3`;`y:real^3`;`v:real^3`]
13480 THEN MRESAL_TAC AFF_GT_2_1[`x:real^3`;`y:real^3`;`v:real^3`][IN_ELIM_THM]
13481 THEN REPEAT STRIP_TAC
13482 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % z + w % y) - x=((u'+v'+w) - &1) % x + v' % (z-x) + w % (y - x)`;REAL_ARITH`&1- &1= &0`]
13483 THEN REDUCE_VECTOR_TAC
13484 THEN REWRITE_TAC[DOT_RMUL;DOT_RADD;DOT_CROSS_SELF]
13485 THEN REDUCE_ARITH_TAC
13486 THEN MATCH_MP_TAC REAL_LT_MUL
13487 THEN ASM_REWRITE_TAC[]);;
13488
13489
13490 let aff_gt_2_1_cross_dotl_4point=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13491               let a1 = y - x in
13492               let a2 = z - x in
13493               let a3 = v - x in
13494               let a4 = u - x in
13495  ~collinear {x,z,v}
13496 /\ u IN aff_gt {x,z} {v}
13497 /\ &0<(a1 cross a2) dot a3 
13498 ==> &0<(a1 cross a2) dot a4 `,
13499 REPEAT GEN_TAC
13500 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13501 THEN REPEAT STRIP_TAC
13502 THEN POP_ASSUM MP_TAC
13503 THEN POP_ASSUM MP_TAC
13504 THEN MRESA_TAC th3[`x:real^3`;`z:real^3`;`v:real^3`]
13505 THEN MRESAL_TAC AFF_GT_2_1[`x:real^3`;`z:real^3`;`v:real^3`][IN_ELIM_THM]
13506 THEN REPEAT STRIP_TAC
13507 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % z + w % y) - x=((u'+v'+w) - &1) % x + v' % (z-x) + w % (y - x)`;REAL_ARITH`&1- &1= &0`]
13508 THEN REDUCE_VECTOR_TAC
13509 THEN REWRITE_TAC[DOT_RMUL;DOT_RADD;DOT_CROSS_SELF]
13510 THEN REDUCE_ARITH_TAC
13511 THEN MATCH_MP_TAC REAL_LT_MUL
13512 THEN ASM_REWRITE_TAC[]);;
13513
13514
13515
13516
13517
13518 let aff_gt_2_1r_rcross_dotl_4point=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13519               let a1 = y - x in
13520               let a2 = z - x in
13521               let a3 = v - x in
13522               let a4 = u - x in
13523  ~collinear {x,v,y}
13524 /\ u IN aff_gt {x,v} {y}
13525 /\ &0<(a1 cross a2) dot a3 
13526 ==> &0<(a4 cross a2) dot a3 `,
13527 REPEAT GEN_TAC
13528 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13529 THEN REPEAT STRIP_TAC
13530 THEN POP_ASSUM MP_TAC
13531 THEN POP_ASSUM MP_TAC
13532 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`y:real^3`]
13533 THEN MRESAL_TAC AFF_GT_2_1[`x:real^3`;`v:real^3`;`y:real^3`][IN_ELIM_THM]
13534 THEN REPEAT STRIP_TAC
13535 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % z + w % y) - x=((u'+v'+w) - &1) % x + v' % (z-x) + w % (y - x)`;REAL_ARITH`&1- &1= &0`]
13536 THEN REDUCE_VECTOR_TAC
13537 THEN REWRITE_TAC[CROSS_LMUL;CROSS_LADD;DOT_LMUL;DOT_LADD;DOT_CROSS_SELF]
13538 THEN REDUCE_ARITH_TAC
13539 THEN MATCH_MP_TAC REAL_LT_MUL
13540 THEN ASM_REWRITE_TAC[]);;
13541
13542
13543
13544
13545
13546 let aff_gt_1_2_cross_dotr_4point=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13547               let a1 = y - x in
13548               let a2 = z - x in
13549               let a3 = v - x in
13550               let a4 = u - x in
13551  ~collinear {x,v,u}
13552 /\ y IN aff_gt {x} {v,u}
13553 /\ &0<(a1 cross a2) dot a3
13554  ==> &0< --((a1 cross a2) dot a4)`,
13555
13556 REPEAT GEN_TAC
13557 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13558 THEN REPEAT STRIP_TAC
13559 THEN POP_ASSUM MP_TAC
13560 THEN POP_ASSUM MP_TAC
13561 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
13562 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
13563 THEN STRIP_TAC
13564 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % z + w % y) - x=((u'+v'+w) - &1) % x + v' % (z-x) + w % (y - x)`;REAL_ARITH`&1- &1= &0`]
13565 THEN REDUCE_VECTOR_TAC
13566 THEN REWRITE_TAC[CROSS_LNEG;CROSS_LMUL;CROSS_LADD;CROSS_REFL;DOT_LMUL;DOT_LADD;]
13567 THEN ONCE_REWRITE_TAC[CROSS_SKEW;CROSS_TRIPLE]
13568 THEN REWRITE_TAC[CROSS_TRIPLE;CROSS_REFL;DOT_LZERO]
13569 THEN REDUCE_ARITH_TAC
13570 THEN STRIP_TAC
13571 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
13572 THEN REWRITE_TAC[DOT_LNEG;REAL_ARITH`--(A* (--B))=A*B`]
13573 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE;]
13574 THEN MATCH_MP_TAC REAL_LT_MUL
13575 THEN ASM_REWRITE_TAC[]
13576 THEN MRESAL_TAC REAL_LT_RCANCEL_IMP[`&0`;`((u - x) cross (z - x)) dot (v - x:real^3)`;`t3:real`;][REAL_ARITH`&0 * A= &0`]
13577 THEN POP_ASSUM MATCH_MP_TAC
13578 THEN POP_ASSUM MP_TAC
13579 THEN REAL_ARITH_TAC);;
13580
13581
13582
13583
13584
13585 let aff_gt_1_2_cross_dotr_4point_neg=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13586               let a1 = y - x in
13587               let a2 = z - x in
13588               let a3 = v - x in
13589               let a4 = u - x in
13590  ~collinear {x,v,u}
13591 /\ y IN aff_gt {x} {v,u}
13592 /\ &0< --((a1 cross a2) dot a3)
13593  ==> &0< ((a1 cross a2) dot a4)`,
13594 REPEAT GEN_TAC
13595 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13596 THEN REPEAT STRIP_TAC
13597 THEN POP_ASSUM MP_TAC
13598 THEN POP_ASSUM MP_TAC
13599 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
13600 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
13601 THEN STRIP_TAC
13602 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % z + w % y) - x=((u'+v'+w) - &1) % x + v' % (z-x) + w % (y - x)`;REAL_ARITH`&1- &1= &0`]
13603 THEN REDUCE_VECTOR_TAC
13604 THEN REWRITE_TAC[CROSS_LNEG;CROSS_LMUL;CROSS_LADD;CROSS_REFL;DOT_LMUL;DOT_LADD;]
13605 THEN ONCE_REWRITE_TAC[CROSS_SKEW;CROSS_TRIPLE]
13606 THEN REWRITE_TAC[CROSS_TRIPLE;CROSS_REFL;DOT_LZERO]
13607 THEN REDUCE_ARITH_TAC
13608 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
13609 THEN REWRITE_TAC[DOT_LNEG;REAL_ARITH`--(A* (--B))=A*B`]
13610 THEN STRIP_TAC
13611 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
13612 THEN REWRITE_TAC[DOT_LNEG;REAL_ARITH`-- --A=A`]
13613 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE;]
13614 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE;]
13615 THEN MATCH_MP_TAC REAL_LT_MUL
13616 THEN ASM_REWRITE_TAC[]
13617 THEN MRESAL_TAC REAL_LT_RCANCEL_IMP[`&0`;`((z - x) cross (u - x)) dot (v - x):real^3`;`t3:real`;][REAL_ARITH`&0 * A= &0`]
13618 THEN POP_ASSUM MATCH_MP_TAC
13619 THEN POP_ASSUM MP_TAC
13620 THEN REAL_ARITH_TAC);;
13621
13622
13623
13624 let aff_gt_1_2_cross_dotr_4point_zero=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13625               let a1 = y - x in
13626               let a2 = z - x in
13627               let a3 = v - x in
13628               let a4 = u - x in
13629  ~collinear {x,v,u}
13630 /\ y IN aff_gt {x} {v,u}
13631 /\ (a1 cross a2) dot a3= &0
13632  ==> ((a1 cross a2) dot a4)= &0`,
13633
13634 REPEAT GEN_TAC
13635 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13636 THEN REPEAT STRIP_TAC
13637 THEN POP_ASSUM MP_TAC
13638 THEN POP_ASSUM MP_TAC
13639 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
13640 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
13641 THEN STRIP_TAC
13642 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % z + w % y) - x=((u'+v'+w) - &1) % x + v' % (z-x) + w % (y - x)`;REAL_ARITH`&1- &1= &0`]
13643 THEN REDUCE_VECTOR_TAC
13644 THEN REWRITE_TAC[CROSS_LNEG;CROSS_LMUL;CROSS_LADD;CROSS_REFL;DOT_LMUL;DOT_LADD;]
13645 THEN ONCE_REWRITE_TAC[CROSS_SKEW;CROSS_TRIPLE]
13646 THEN REWRITE_TAC[CROSS_TRIPLE;CROSS_REFL;DOT_LZERO]
13647 THEN REDUCE_ARITH_TAC
13648 THEN STRIP_TAC
13649 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
13650 THEN REWRITE_TAC[DOT_LNEG;REAL_ARITH`--(A* (--B))=A*B`]
13651 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE;]
13652 THEN POP_ASSUM MP_TAC
13653 THEN ASM_REWRITE_TAC[REAL_ENTIRE]
13654 THEN STRIP_TAC
13655 THEN ASM_TAC THEN REAL_ARITH_TAC);;
13656
13657
13658 let exists_esilon_real=prove(`!a:real b:real.
13659 &0<a ==> ?t. &0< t /\ t< &1 /\ 
13660 (!h. &0< h /\ h< t==> &0< a- h * b)`,
13661 REPEAT STRIP_TAC
13662 THEN DISJ_CASES_TAC(REAL_ARITH`b <= &0 \/ &0< b`)
13663 THENL[ EXISTS_TAC`&1/ &2`
13664 THEN REWRITE_TAC[REAL_ARITH`&0< &1/ &2 /\ &1/ &2< &1`;]
13665 THEN REPEAT STRIP_TAC
13666 THEN MATCH_MP_TAC(REAL_ARITH`&0<a /\ &0<= h*(-- b)==> &0< a-h*b`)
13667 THEN ASM_REWRITE_TAC[]
13668 THEN MATCH_MP_TAC REAL_LE_MUL
13669 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= --B<=> B<= &0`]
13670 THEN ASM_TAC THEN REAL_ARITH_TAC;
13671 ABBREV_TAC`t1= (min (inv (b:real) * a) (&1)) / &2`
13672 THEN MRESA1_TAC REAL_LT_INV`b:real`
13673 THEN MRESA_TAC REAL_LT_MUL[`inv b:real`;`a:real`]
13674 THEN MP_TAC(REAL_ARITH`&0 < inv b * a /\ t1= (min (inv (b:real) * a) (&1)) / &2
13675 ==> &0< t1 /\ t1< &1 /\ t1< inv b * a`)
13676 THEN RESA_TAC
13677 THEN EXISTS_TAC `t1:real`
13678 THEN ASM_REWRITE_TAC[]
13679 THEN REPEAT STRIP_TAC
13680 THEN MP_TAC(REAL_ARITH`h<t1 /\ t1< inv b *a==> &0< inv b *a- h`)
13681 THEN RESA_TAC
13682 THEN MRESA_TAC REAL_LT_MUL[`b:real`;`inv b *a- h:real`]
13683 THEN POP_ASSUM MP_TAC
13684 THEN REWRITE_TAC[REAL_ARITH`b * (inv b * a - h)= (inv b * b) * a- h *b `]
13685 THEN MP_TAC(REAL_ARITH`&0<b==> ~(b= &0)`)
13686 THEN RESA_TAC
13687 THEN MRESA1_TAC REAL_MUL_LINV`b:real`
13688 THEN REAL_ARITH_TAC]);;
13689
13690
13691
13692 let invariant_cross_dotr_esilon_3piont=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13693               let a1 = y - x in
13694               let a2 = z - x in
13695               let a3 = v - x in
13696               let a4 = u - x in
13697  &0<(a1 cross a2) dot a3
13698  ==>
13699 ?t. &0< t /\ t< &1 /\ 
13700 (!h. &0< h /\ h< t==>
13701  &0< ((a1 cross a2) dot ((&1 - h) % v + h % u-x)))`,
13702
13703 REPEAT GEN_TAC
13704 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13705 THEN REPEAT STRIP_TAC
13706 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - h) % v + h % u-x=(&1 - h) % (v-x) + h % (u-x)`;]
13707 THEN REWRITE_TAC[DOT_RMUL;DOT_RADD;]
13708 THEN REWRITE_TAC[REAL_ARITH`(&1-h)*A+h*B=A-h*(A-B)`]
13709 THEN MATCH_MP_TAC exists_esilon_real
13710 THEN ASM_REWRITE_TAC[]);;
13711
13712
13713
13714 let invariant_rcross_dot_esilon_3piont=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13715               let a1 = y - x in
13716               let a2 = z - x in
13717               let a3 = v - x in
13718               let a4 = u - x in
13719  &0<(a1 cross a2) dot a3
13720  ==>
13721 ?t. &0< t /\ t< &1 /\ 
13722 (!h. &0< h /\ h< t==>
13723  &0< (((&1 - h) % y + h % u-x) cross a2) dot a3)`,
13724 REPEAT GEN_TAC
13725 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13726 THEN REPEAT STRIP_TAC
13727 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - h) % v + h % u-x=(&1 - h) % (v-x) + h % (u-x)`;]
13728 THEN REWRITE_TAC[CROSS_LMUL;CROSS_LADD;DOT_LMUL;DOT_LADD;]
13729 THEN REWRITE_TAC[REAL_ARITH`(&1-h)*A+h*B=A-h*(A-B)`]
13730 THEN MATCH_MP_TAC exists_esilon_real
13731 THEN ASM_REWRITE_TAC[]);;
13732
13733
13734 let invariant_crossr_dot_esilon_3piont=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3.
13735               let a1 = y - x in
13736               let a2 = z - x in
13737               let a3 = v - x in
13738               let a4 = u - x in
13739  &0<(a1 cross a2) dot a3
13740  ==>
13741 ?t. &0< t /\ t< &1 /\ 
13742 (!h. &0< h /\ h< t==>
13743  &0< (a1 cross ((&1 - h) % z + h % u-x)) dot a3)`,
13744 REPEAT GEN_TAC
13745 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13746 THEN REPEAT STRIP_TAC
13747 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - h) % v + h % u-x=(&1 - h) % (v-x) + h % (u-x)`;]
13748 THEN REWRITE_TAC[CROSS_RMUL;CROSS_RADD;DOT_LMUL;DOT_LADD;]
13749 THEN REWRITE_TAC[REAL_ARITH`(&1-h)*A+h*B=A-h*(A-B)`]
13750 THEN MATCH_MP_TAC exists_esilon_real
13751 THEN ASM_REWRITE_TAC[]);;
13752
13753
13754 let point_in_aff_gt_2_1_change_point_in_aff_gt_1_2=prove(` !x:real^3 v:real^3 u:real^3 y:real^3.
13755  ~collinear {x,v,u}
13756 /\  y IN aff_gt {x} {v,u}
13757 ==> u IN aff_gt {x,v} {y}`,
13758 REPEAT STRIP_TAC
13759 THEN POP_ASSUM MP_TAC
13760 THEN DISCH_THEN(LABEL_TAC"YEU")
13761 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
13762 THEN REMOVE_THEN "YEU" MP_TAC
13763 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`;]
13764 THEN MRESA_TAC th3[`x:real^3`;`y:real^3`;`v:real^3`;]
13765 THEN MRESA_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`;]
13766 THEN MRESAL_TAC AFF_GT_2_1[`x:real^3`;`v:real^3`;`y:real^3`;][IN_ELIM_THM]
13767 THEN RESA_TAC
13768 THEN MP_TAC(REAL_ARITH`&0< t3==> ~(t3= &0)`)
13769 THEN RESA_TAC
13770 THEN MRESA1_TAC REAL_LT_INV`t3:real`
13771 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
13772 THEN EXISTS_TAC`-- inv t3 * t1:real`
13773 THEN EXISTS_TAC`-- inv t3 * t2:real`
13774 THEN EXISTS_TAC`inv t3 :real`
13775 THEN ASM_REWRITE_TAC[REAL_ARITH`--inv t3 * t1 + --inv t3 * t2 + inv t3= inv t3 *( t3 + &1- (t1+t2+t3))`;REAL_ARITH`A+ &1- &1 =A`;VECTOR_ARITH`(--inv t3 * t1) % x +
13776  (--inv t3 * t2) % v +
13777  inv t3 % (t1 % x + t2 % v + t3 % u)= (inv t3 * t3) % u`]
13778 THEN VECTOR_ARITH_TAC);;
13779
13780 let pos_in_aff_gt_fan=prove(`!x:real^3 v:real^3 u:real^3 a:real.
13781 DISJOINT {x} {v,u}
13782 /\ &0<a /\ a< &1
13783 ==>
13784 (&1-a)%v + a % u IN aff_gt {x} {v,u:real^3}`,
13785
13786 REPEAT STRIP_TAC
13787 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
13788 THEN EXISTS_TAC`&0`
13789 THEN EXISTS_TAC`&1 -a:real`
13790 THEN EXISTS_TAC`a:real`
13791 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 < &1 - a /\ &0 < a`)
13792 THEN RESA_TAC
13793 THEN ASM_REWRITE_TAC[]
13794 THEN REDUCE_VECTOR_TAC
13795 THEN REAL_ARITH_TAC);;
13796
13797
13798 let pos_in_aff_gt_2_1_fan=prove(`!x:real^3 v:real^3 u:real^3 a:real.
13799 DISJOINT {x,v} {u}
13800 /\ &0<a /\ a< &1
13801 ==>
13802 (&1-a)%v + a % u IN aff_gt {x,v} {u:real^3}`,
13803
13804 REPEAT STRIP_TAC
13805 THEN MRESAL_TAC AFF_GT_2_1[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
13806 THEN EXISTS_TAC`&0`
13807 THEN EXISTS_TAC`&1 -a:real`
13808 THEN EXISTS_TAC`a:real`
13809 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 < &1 - a /\ &0 < a`)
13810 THEN RESA_TAC
13811 THEN ASM_REWRITE_TAC[]
13812 THEN REDUCE_VECTOR_TAC
13813 THEN REAL_ARITH_TAC);;
13814
13815
13816
13817 let condition_4point_aff_gt_1_2inter_aff_gt_1_2=prove(`!x:real^3 y:real^3 z:real^3 v:real^3 u:real^3 w:real^3 a:real.
13818               let a1 = y - x in
13819               let a2 = z - x in
13820               let a3 = v - x in
13821               let a4 = u - x in
13822               let a5 = w - x in
13823
13824  ~collinear {x,v,u}
13825 /\ ~collinear {x,u,w}
13826 /\ ~collinear {x,y,z}
13827 /\  &0< a /\ a< &1 
13828 /\ y IN aff_gt {x} {v,u}
13829 /\ &0<(a3 cross a4) dot a5
13830 /\ (!h. &0< h /\ h< a==> ~collinear {x,v,(&1-h)%u+h%w})
13831 /\ &0<(a3 cross a1) dot a2
13832  ==> ?t. &0< t /\ t< &1 /\ 
13833 (!h. &0< h /\ h< t==> ~(aff_gt {x} {y,z} INTER aff_gt {x} {v,(&1-h)%u+h%w}={}))`,
13834
13835 REPEAT STRIP_TAC
13836 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13837 THEN REPEAT STRIP_TAC
13838 THEN POP_ASSUM MP_TAC
13839 THEN POP_ASSUM MP_TAC
13840 THEN DISCH_THEN(LABEL_TAC"LINH")
13841 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
13842 THEN STRIP_TAC 
13843 THEN MRESA_TAC aff_gt_1_2_cross_dotr_4point[`x:real^3`;`y:real^3`;`z:real^3`;`v:real^3`;`u:real^3`;]
13844 THEN POP_ASSUM MP_TAC
13845 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13846 THEN RESA_TAC
13847 THEN MRESA_TAC invariant_cross_dotr_esilon_3piont[`x:real^3`; `z:real^3`;`y:real^3`;`u:real^3`;`w:real^3`]
13848 THEN POP_ASSUM MP_TAC
13849 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13850 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
13851 THEN ASM_REWRITE_TAC[DOT_LNEG]
13852 THEN STRIP_TAC
13853 THEN POP_ASSUM MP_TAC
13854 THEN DISCH_THEN(LABEL_TAC"YEU")
13855 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
13856 THEN MRESA_TAC point_in_aff_gt_2_1_change_point_in_aff_gt_1_2[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
13857 THEN MRESA_TAC aff_gt_2_1r_rcross_dotl_4point[`x:real^3`;`y:real^3`;`z:real^3`;`v:real^3`;`u:real^3`]
13858 THEN POP_ASSUM MP_TAC
13859 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13860 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13861 THEN RESA_TAC
13862 THEN MRESA_TAC invariant_rcross_dot_esilon_3piont[`x:real^3`; `u:real^3`;`z:real^3`;`v:real^3`;`w:real^3`]
13863 THEN POP_ASSUM MP_TAC
13864 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13865 THEN RESA_TAC
13866 THEN POP_ASSUM MP_TAC
13867 THEN DISCH_THEN(LABEL_TAC"EM")
13868 THEN ABBREV_TAC`t1= min (min t t') a:real`
13869 THEN MP_TAC(REAL_ARITH`&0<t/\ t< &1 /\ &0< t' /\ t'< &1 /\ &0< a /\ a < &1 /\ t1=min (min t t') a ==> &0< t1 /\ t1 < &1`)
13870 THEN RESA_TAC
13871 THEN EXISTS_TAC`t1:real`
13872 THEN ASM_REWRITE_TAC[SET_RULE`~(A={})<=> ?y1. y1 IN A`]
13873 THEN REPEAT STRIP_TAC
13874 THEN ABBREV_TAC`a1=(y-x):real^3`
13875 THEN ABBREV_TAC`a2=(z-x):real^3`
13876 THEN ABBREV_TAC`a3=(v-x) :real^3`
13877 THEN ABBREV_TAC`a4=(&1 - h) % u + h % w-x:real^3`
13878 THEN ABBREV_TAC`va=a1 cross a2:real^3`
13879 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
13880 THEN ABBREV_TAC`v3= (vb:real^3) cross (va:real^3)+(x:real^3)`
13881 THEN EXISTS_TAC `v3:real^3`
13882 THEN MP_TAC(REAL_ARITH`h<t1 /\ t1< &1 /\ t1=min (min t t') a==> h<t' /\ h< &1 /\ h< t /\ h<a`)
13883 THEN RESA_TAC
13884 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `h:real`)
13885 THEN POP_ASSUM MP_TAC
13886 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
13887 THEN REWRITE_TAC[DOT_LNEG]
13888 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
13889 THEN REWRITE_TAC[GSYM DOT_LNEG]
13890 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
13891 THEN RESA_TAC
13892 THEN MRESA_TAC th3[`x:real^3`;`u:real^3`;`w:real^3`;]
13893 THEN MRESA_TAC pos_in_aff_gt_2_1_fan [`x:real^3`;`u:real^3`;`w:real^3`;`h:real`]
13894 THEN MRESAL_TAC aff_gt_2_1_cross_dotl_4point[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`(&1 - h) % u + h % w:real^3`][VECTOR_ARITH`((&1 - h) % u + h % w) - x=(&1 - h) % u + h % w - x`]
13895 THEN POP_ASSUM MP_TAC
13896 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13897 THEN RESA_TAC
13898 THEN POP_ASSUM MP_TAC
13899 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
13900 THEN STRIP_TAC
13901 THEN MRESA_TAC aff_gt_inter_aff_gt [`(x:real^3)`;`(v:real^3)`;`(u:real^3)`]
13902 THEN MP_TAC(SET_RULE`y IN aff_gt {x} {v, u} /\ aff_gt {x} {v, u} = aff_gt {x, v} {u} INTER aff_gt {x, u} {v}
13903 ==> y IN aff_gt {x, v} {u:real^3}`)
13904 THEN RESA_TAC
13905 THEN MRESAL_TAC aff_gt_2_1r_rcross_dotl_4point[`x:real^3`;`u:real^3`;`(&1 - h) % u + h % w:real^3`;`v:real^3`;`y:real^3`][VECTOR_ARITH`((&1 - h) % u + h % w) - x=(&1 - h) % u + h % w - x`]
13906 THEN POP_ASSUM MP_TAC
13907 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13908 THEN ASM_REWRITE_TAC[]
13909 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
13910 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
13911 THEN ASM_REWRITE_TAC[DOT_LNEG]
13912 THEN STRIP_TAC
13913 THEN MRESAL_TAC condition_cross_dot_4point[`x:real^3`;`v:real^3`;`(&1 - h) % u + h % w:real^3`;`y:real^3`;`z:real^3` ][VECTOR_ARITH`((&1 - h) % u + h % w) - x=(&1 - h) % u + h % w - x`]
13914 THEN POP_ASSUM MP_TAC
13915 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13916 THEN ASM_REWRITE_TAC[]
13917 THEN MRESAL_TAC condition_cross_dot_4point[`x:real^3`; `z:real^3`;`y:real^3` ;`v:real^3`;`(&1 - h) % u + h % w:real^3`][VECTOR_ARITH`((&1 - h) % u + h % w) - x=(&1 - h) % u + h % w - x`]
13918 THEN POP_ASSUM MP_TAC
13919 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13920 THEN RESA_TAC
13921 THEN POP_ASSUM MP_TAC
13922 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
13923 THEN ASM_REWRITE_TAC[]
13924 THEN ONCE_REWRITE_TAC[GSYM CROSS_RNEG]
13925 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
13926 THEN REWRITE_TAC[DOT_LNEG;REAL_ARITH`--(--A)=A`]
13927 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th`h:real`)
13928 THEN REMOVE_THEN "LINH" (fun th-> MRESA1_TAC th`h:real`)
13929 THEN SET_TAC[]);;
13930
13931
13932
13933
13934
13935
13936
13937
13938
13939
13940
13941 let exists_dart_leads_into_edge_eq_topological1_component_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool y:real^3 z:real^3 v:real^3 u:real^3 w:real^3.
13942 FAN(x,V,E) 
13943 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
13944 /\ fan80(x,V,E)
13945 /\ U IN topological_component_yfan (x,V,E)
13946 /\ z IN U
13947 /\ {v,u} IN E /\ {u,w} IN E 
13948 /\ sigma_fan x V E u w = v
13949 /\ y IN aff_gt {x} {v,u} 
13950 /\ y IN xfan(x,V,E)
13951 /\ ~(y=x)
13952 /\(!t. &0< t /\ t< &1==>   (&1-t)%y+t%z IN yfan(x,V,E))
13953 /\ &0<((v-x) cross (y-x)) dot (z-x)
13954
13955 ==> dart_leads_into x V E v u = U`,
13956
13957
13958 REPEAT STRIP_TAC
13959 THEN MRESA_TAC connected_component_of_faces_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`]
13960 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
13961 THEN REWRITE_TAC[fan80]
13962 THEN STRIP_TAC
13963 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
13964 THEN MRESA_TAC fan_run_in_small_is_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
13965 THEN POP_ASSUM MP_TAC
13966 THEN DISCH_THEN (LABEL_TAC"HA")
13967 THEN MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
13968 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"EM")
13969 THEN MRESA_TAC DART_LEADS_INTO[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
13970 `u:real^3`;`w:real^3`;]
13971 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
13972 THEN MRESA_TAC rw_dart_avoids_fan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
13973 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"OI")
13974 THEN MP_TAC(REAL_ARITH`&1> h'' /\ h'' > &0==> -- &1 < h'' /\ h''< &1 /\ -- &1 <= h'' /\ h''<= &1/\ &0 < h'' /\ h'' <= &1`) THEN RESA_TAC
13975 THEN MRESA1_TAC ACS_BOUNDS_LT`h'':real`
13976 THEN MRESAL_TAC ACS_MONO_LT[`&0`;`h'':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
13977 THEN MRESA1_TAC COS_ACS `h'':real`
13978 THEN ABBREV_TAC`h1= min h (min (h':real) (acs h''))/ &2`
13979 THEN MP_TAC(REAL_ARITH`h1= min h (min (h':real) (acs h''))/ &2 /\ &0< h /\ &0<h' /\ &0< acs h'' /\ acs h''< pi/ &2==> &0< h1 /\ h1< h /\ h1<h' /\ h1<pi/ &2/\ h1< acs h'' /\ acs h'' <= pi /\ &0<= h1`)
13980 THEN ASM_REWRITE_TAC[PI_WORKS] THEN STRIP_TAC
13981 THEN MRESAL_TAC COS_MONO_LT[`h1:real`;`acs h'':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
13982 THEN MP_TAC(REAL_ARITH`h''< cos h1==> h''<= cos h1`) THEN RESA_TAC
13983 THEN REMOVE_THEN "EM"(fun th-> MRESAL1_TAC th `h1:real`[SET_RULE`~(A={})<=> ?y. y IN A`])
13984 THEN REMOVE_THEN "YEU"(fun th-> MRESA_TAC th [`h1:real`;`y':real^3`])
13985 THEN MRESA_TAC exists_rw_dart_inter_aff_gt1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`;`h1:real`]
13986 THEN POP_ASSUM MP_TAC
13987 THEN DISCH_THEN(LABEL_TAC"MA1")
13988 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
13989 ` (u:real^3)`]
13990 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
13991 ` (v:real^3)`]
13992 THEN MRESA_TAC point_in_yfan_and_point_in_xfan_indepent_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;` z:real^3`]
13993 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)`]
13994 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < t1 / &2 ==> ~collinear {x, v, (&1 - h) % u + h % w:real^3})`ASSUME_TAC
13995 THENL[
13996 POP_ASSUM MP_TAC
13997 THEN DISCH_THEN(LABEL_TAC"CHANGE")
13998 THEN GEN_TAC THEN STRIP_TAC
13999 THEN REMOVE_THEN "CHANGE"(fun th-> MRESA1_TAC th`h'''':real`)
14000 THEN POP_ASSUM MATCH_MP_TAC
14001 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
14002 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
14003 THEN REAL_ARITH_TAC;
14004 MP_TAC(REAL_ARITH`&0< t1 /\ t1<= &1==> &0< t1/ &2 /\ t1/ &2 < &1`)
14005 THEN RESA_TAC
14006 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
14007 THEN POP_ASSUM MP_TAC
14008 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14009 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14010 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14011 THEN RESA_TAC
14012 THEN MRESA_TAC condition_4point_aff_gt_1_2inter_aff_gt_1_2[`x:real^3`;`y:real^3`;`z:real^3`;`v:real^3`;` u:real^3`;`w:real^3`;`t1/ &2:real`]
14013 THEN POP_ASSUM MP_TAC
14014 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
14015 THEN RESA_TAC
14016 THEN POP_ASSUM MP_TAC
14017 THEN DISCH_THEN(LABEL_TAC"MA2")
14018 THEN ABBREV_TAC`t2=min h ( min h''' t) / &2:real`
14019 THEN MP_TAC(REAL_ARITH`t2=min h ( min h''' t) / &2:real /\ &0<h /\ &0<t /\ &0< h'''==> t2< h''' /\ t2< t /\ &0< t2/\ t2< h`)
14020 THEN RESA_TAC
14021 THEN REMOVE_THEN "MA1"(fun th-> MRESA1_TAC th `t2:real`)
14022 THEN POP_ASSUM MP_TAC
14023 THEN ASM_REWRITE_TAC[]
14024 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y1. y1 IN A`;INTER;IN_ELIM_THM]
14025 THEN RESA_TAC
14026 THEN REMOVE_THEN "MA2"(fun th-> MRESA1_TAC th `t2:real`)
14027 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
14028 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;` z:real^3`]
14029 THEN MP_TAC(SET_RULE`~(x=z) /\ ~(y=x)==> DISJOINT {x} {y,z:real^3}`)
14030 THEN RESA_TAC
14031 THEN MRESA_TAC aff_gt_subset_component_y_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`]
14032 THEN MP_TAC(SET_RULE`~(aff_gt {x} {y, z} INTER aff_gt {x} {v, (&1 - t2) % u + t2 % w} = {})/\
14033 aff_gt {x} {y, z} SUBSET U==> ~(U INTER aff_gt {x:real^3} {v, (&1 - t2) % u + t2 % w} = {})`)
14034 THEN ASM_REWRITE_TAC[]
14035 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?y2. y2 IN A`;INTER;IN_ELIM_THM]
14036 THEN RESA_TAC
14037 THEN MRESA_TAC expand_element_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y2:real^3`]
14038 THEN MRESA_TAC dart_leads_into_fan_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
14039 THEN MP_TAC(SET_RULE`y1 IN rw_dart_fan x V E (x,u,w,v) (cos h1)
14040 /\ rw_dart_fan x V E (x,u,w,v) (cos h1) SUBSET (dart_leads_into x V E u w)
14041 ==> y1 IN (dart_leads_into x V E u (w:real^3))`)
14042 THEN RESA_TAC
14043 THEN MRESA_TAC expand_element_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(dart_leads_into x V E u w):real^3->bool`;`y1:real^3`]
14044 THEN MRESA_TAC zpoint_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y2:real^3`]
14045 THEN MRESA_TAC zpoint_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(dart_leads_into x V E u w):real^3->bool`;`y1:real^3`]
14046 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_EQ_EQ]
14047 THEN MRESA_TAC CONVEX_AFF_GT[`{x:real^3}`;`{v, (&1 - t2) % u + t2  % w:real^3}`]
14048 THEN MRESA_TAC CONVEX_CONNECTED[`aff_gt {x} {v, (&1 - t2) % u + t2 % w}:real^3->bool`]
14049 THEN POP_ASSUM MP_TAC
14050 THEN REWRITE_TAC[CONNECTED_IFF_CONNECTED_COMPONENT]
14051 THEN DISCH_TAC
14052 THEN POP_ASSUM (fun th-> MRESA_TAC th [`y1:real^3`;`y2:real^3`])
14053 THEN REMOVE_THEN "HA" (fun th-> MRESA1_TAC th `t2:real`)
14054 THEN MRESA_TAC CONNECTED_COMPONENT_OF_SUBSET[`aff_gt {x} {v, (&1 - t2) % u + t2 % w:real^3}:real^3-> bool`;`yfan (x:real^3,(V:real^3->bool),(E:(real^3->bool)->bool)):real^3->bool`;`y1:real^3`;`y2:real^3`]
14055 ]);;
14056
14057
14058
14059
14060
14061 let JUTSTKG=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool.
14062 FAN(x,V,E) 
14063 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
14064 /\ fan80(x,V,E)
14065 /\ U IN topological_component_yfan (x,V,E)
14066 ==> ?v u. {v,u} IN E /\ dart_leads_into x V E v u = U`,
14067
14068 REPEAT STRIP_TAC
14069 THEN MRESA_TAC exists_point_in_component_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)` ;`U:real^3->bool`]
14070 THEN MRESA_TAC connect_insidepoint_to_bound_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)` ;`U:real^3->bool`;`z:real^3`]
14071 THEN POP_ASSUM MP_TAC
14072 THEN POP_ASSUM (fun th-> MP_TAC th THEN ASSUME_TAC th)
14073 THEN REWRITE_TAC[xfan;IN_ELIM_THM]
14074 THEN STRIP_TAC
14075 THEN POP_ASSUM MP_TAC
14076 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
14077 THEN POP_ASSUM MP_TAC
14078 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[IN]
14079 THEN RESA_TAC
14080 THEN SUBGOAL_THEN `{v,w:real^3} IN E`ASSUME_TAC
14081 THENL(*1*)[POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th);IN]);(*1*)
14082 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
14083 ` (v:real^3)`]
14084 THEN MRESAL_TAC aff_ge_eq_aff_gt_union_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`][UNION;IN_ELIM_THM]
14085 THEN STRIP_TAC
14086 THENL(*2*)[
14087 STRIP_TAC
14088 THEN MRESA_TAC point_in_yfan_and_point_in_xfan_indepent_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;` z:real^3`]
14089 THEN DISJ_CASES_TAC(REAL_ARITH`&0 < ((v - x) cross (y - x)) dot (z - x) \/ &0< --(((v - x) cross (y - x)) dot (z - x)) \/  ((v - x:real^3) cross (y - x)) dot (z - x)= &0`)
14090 THENL(*3*)[
14091 MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
14092 THEN REMOVE_ASSUM_TAC
14093 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
14094 THEN POP_ASSUM MP_TAC
14095 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14096 THEN ASM_REWRITE_TAC[]
14097 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
14098 THEN POP_ASSUM MP_TAC
14099 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14100 THEN ASM_REWRITE_TAC[]
14101 THEN STRIP_TAC
14102 THEN STRIP_TAC
14103 THEN MRESA_TAC exists_dart_leads_into_edge_eq_topological1_component_fan[`x:real^3`;`(V:real^3->bool)` ;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`v:real^3`;`w:real^3`;`inverse1_sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (w:real^3) (v:real^3)`]
14104 THEN POP_ASSUM MP_TAC
14105 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14106 THEN RESA_TAC
14107 THEN EXISTS_TAC`v:real^3`
14108 THEN EXISTS_TAC`w:real^3`
14109 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14110 THEN ASM_REWRITE_TAC[];(*3*)
14111
14112 POP_ASSUM MP_TAC
14113 THEN STRIP_TAC
14114 THENL(*4*)[
14115 MRESA_TAC aff_gt_1_2_cross_dotr_4point_neg[`x:real^3`;`y:real^3`;`z:real^3`;`v:real^3`;`w:real^3`;]
14116 THEN POP_ASSUM MP_TAC
14117 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
14118 THEN RESA_TAC
14119 THEN POP_ASSUM MP_TAC
14120 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14121 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14122 THEN RESA_TAC
14123 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
14124 THEN REMOVE_ASSUM_TAC
14125 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
14126 THEN POP_ASSUM MP_TAC
14127 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
14128 THEN STRIP_TAC
14129 THEN MRESA_TAC exists_dart_leads_into_edge_eq_topological1_component_fan[`x:real^3`;`(V:real^3->bool)` ;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`w:real^3`;`v:real^3`;`inverse1_sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)`]
14130 THEN POP_ASSUM MP_TAC
14131 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14132 THEN RESA_TAC
14133 THEN EXISTS_TAC`w:real^3`
14134 THEN EXISTS_TAC`v:real^3`
14135 THEN ASM_REWRITE_TAC[]
14136 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14137 THEN ASM_REWRITE_TAC[];(*4*)
14138
14139 MRESA_TAC aff_gt_1_2_cross_dotr_4point_zero[`x:real^3`;`y:real^3`;`z:real^3`;`v:real^3`;`w:real^3`;]
14140 THEN POP_ASSUM MP_TAC
14141 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
14142 THEN RESA_TAC
14143 THEN POP_ASSUM MP_TAC
14144 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14145 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14146 THEN RESA_TAC
14147 THEN MRESA_TAC not_azim_points1_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`v:real^3`;`w:real^3`]
14148 THEN MRESA_TAC not_azim_points1_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`w:real^3`;`v:real^3`]
14149 THEN POP_ASSUM MP_TAC
14150 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14151 THEN ASM_REWRITE_TAC[]
14152 THEN STRIP_TAC
14153 THEN MP_TAC(REAL_ARITH`~(azim x y z v = &0) /\ &0<= azim x y z v==> &0< azim x y z (v:real^3) `)
14154 THEN ASM_REWRITE_TAC[azim]
14155 THEN STRIP_TAC
14156 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`w:real^3`;`y:real^3`]
14157 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`w:real^3`;`v:real^3`;`y:real^3`]
14158 THEN POP_ASSUM MP_TAC
14159 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14160 THEN ASM_REWRITE_TAC[]
14161 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14162 THEN STRIP_TAC
14163 THEN DISJ_CASES_TAC(REAL_ARITH`azim x y z (v:real^3)< pi \/ pi<= azim x y z (v:real^3)`)
14164 THENL(*5*)[
14165 MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`y:real^3`; `v:real^3`;`z:real^3`]
14166 THEN POP_ASSUM MP_TAC
14167 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14168 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14169 THEN RESA_TAC
14170 THEN POP_ASSUM MP_TAC
14171 THEN REAL_ARITH_TAC;(*5*)
14172
14173 POP_ASSUM MP_TAC
14174 THEN MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`w:real^3`; `v:real^3`;`y:real^3`]
14175 THEN POP_ASSUM MP_TAC
14176 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14177 THEN ASM_REWRITE_TAC[]
14178 THEN STRIP_TAC
14179 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC th)
14180 THEN STRIP_TAC
14181 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`y:real^3`;`z:real^3`;`w:real^3`;`v:real^3`]
14182 THEN MP_TAC(REAL_ARITH`azim x y z v = azim x y z w + pi/\
14183 azim x y z v < &2 * pi/\ ~(azim x y z w = &0) /\ &0 <= azim x y z w 
14184 ==>  &0< azim x y z w /\ azim x y z w < pi
14185 `)
14186 THEN ASM_REWRITE_TAC[azim]
14187 THEN STRIP_TAC
14188 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`y:real^3`; `w:real^3`;`z:real^3`]
14189 THEN POP_ASSUM MP_TAC
14190 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14191 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14192 THEN RESA_TAC
14193 THEN POP_ASSUM MP_TAC
14194 THEN REAL_ARITH_TAC](*5*)](*4*)](*3*);(*2*)
14195
14196
14197 STRIP_TAC
14198 THEN MRESA_TAC exists_dart_leads_into_edge_eq_topological_component_fan[`x:real^3`;`(V:real^3->bool)` ;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`v:real^3`]
14199 THEN EXISTS_TAC `v:real^3`
14200 THEN EXISTS_TAC `w':real^3`
14201 THEN ASM_REWRITE_TAC[];
14202 STRIP_TAC
14203 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
14204 ` (w:real^3)`]
14205 THEN POP_ASSUM MP_TAC
14206 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14207 THEN ASM_REWRITE_TAC[]
14208 THEN STRIP_TAC
14209 THEN MRESA_TAC exists_dart_leads_into_edge_eq_topological_component_fan[`x:real^3`;`(V:real^3->bool)` ;`(E:(real^3->bool)->bool)`;`U:real^3->bool`;`y:real^3`;`z:real^3`;`w:real^3`]
14210 THEN EXISTS_TAC `w:real^3`
14211 THEN EXISTS_TAC `w':real^3`
14212 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14213 THEN ASM_REWRITE_TAC[]]]);;
14214
14215
14216
14217 (**************KVQWYDL*******************)
14218
14219
14220
14221 let AFF_GT_3_1 = prove
14222  (`!x v u w.
14223         DISJOINT {x,v,u} {w}
14224         ==> aff_gt {x,v,u} {w} =
14225              {y | ?t1 t2 t3 t4.
14226                      &0 < t4 /\
14227                      t1 + t2 +t3 +t4 = &1 /\
14228                      y = t1 % x + t2 % v + t3 % u +t4 % w }`,
14229   AFF_TAC);;
14230
14231
14232
14233 let AFF_GT_1_3 = prove
14234  (`!x v u w.
14235         DISJOINT {x} {v,u,w}
14236         ==> aff_gt {x} {v,u,w} =
14237              {y | ?t1 t2 t3 t4.
14238                      &0 < t2 /\ &0< t3 /\ &0<t4 /\
14239                      t1 + t2 +t3 +t4 = &1 /\
14240                      y = t1 % x + t2 % v + t3 % u +t4 % w }`,
14241   AFF_TAC);;
14242
14243 let AFF_GE_1_3 = prove
14244  (`!x v u w.
14245         DISJOINT {x} {v,u,w}
14246         ==> aff_ge {x} {v,u,w} =
14247              {y | ?t1 t2 t3 t4.
14248                      &0 <= t2 /\ &0<= t3 /\ &0<= t4 /\
14249                      t1 + t2 +t3 +t4 = &1 /\
14250                      y = t1 % x + t2 % v + t3 % u +t4 % w }`,
14251   AFF_TAC);;
14252
14253
14254
14255 let notcoplanar_disjoint=prove(`!x  v u w:real^3.
14256 ~coplanar {x,v,u,w} 
14257 ==> ~(x=v) /\ ~(x=u) /\ ~(x=w)/\ ~(v=u) /\ ~(v=w) /\ ~(u=w)`,
14258 REPEAT GEN_TAC
14259 THEN DISCH_TAC
14260 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={B,C,D,A}`] THEN DISCH_TAC THEN MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={C,D,A,B}`] THEN DISCH_TAC THEN ASSUME_TAC th)
14261 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14262 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`v:real^3`;`u:real^3`;`w:real^3`;`x:real^3`]
14263 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`u:real^3`;`w:real^3`;`x:real^3`;`v:real^3`]
14264 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
14265 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
14266 THEN MRESA_TAC th3[`v:real^3`;`u:real^3`;`w:real^3`]
14267 THEN MRESA_TAC th3[`u:real^3`;`w:real^3`;`x:real^3`]);;
14268
14269
14270
14271 let notcoplanar_disjoints=prove(`!x  v u w:real^3.
14272 ~coplanar {x,v,u,w} 
14273 ==> DISJOINT{x,v,u} {w} /\ DISJOINT{x,u,w} {v} /\ DISJOINT{x,w,v} {u} /\ DISJOINT{x} {v,u,w}/\ DISJOINT {x,u} {v,w} /\ DISJOINT {x} {v,u} /\ DISJOINT {x} {u,w} /\ DISJOINT {x} {w,v}  `,
14274 REPEAT STRIP_TAC
14275 THEN MRESA_TAC notcoplanar_disjoint[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14276 THEN ASM_TAC THEN SET_TAC[]);;
14277
14278
14279
14280 let coplanar_imp_continuous_collinear=prove(`!x:real^3  v:real^3 u:real^3 w:real^3.
14281  ~(coplanar{x,v,u,w})
14282 ==>(!t:real.  ~(t= &0) ==> ~collinear {x,v,(&1-t)%u+t%w} )`,
14283 REPEAT STRIP_TAC
14284 THEN POP_ASSUM MP_TAC
14285 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14286 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`)
14287 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`(&1 - t) % u + t % w:real^3`]);;
14288
14289
14290
14291
14292
14293 let aff_gt_1_3_eq_unions_aff_gt_1_2=prove(`!x  v u w:real^3.
14294 ~coplanar {x,v,u,w}
14295 ==>
14296 aff_gt {x} {v,u,w} = UNIONS {aff_gt{x} {v,(&1-a)%u+ a % w}| &0<a /\ a< &1}`,
14297 REPEAT STRIP_TAC
14298 THEN MRESA_TAC notcoplanar_disjoints[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14299 THEN MRESA_TAC notcoplanar_disjoint[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14300 THEN MRESA_TAC AFF_GT_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14301 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM;UNION]
14302 THEN REDUCE_VECTOR_TAC
14303 THEN GEN_TAC
14304 THEN EQ_TAC
14305 THENL[
14306 STRIP_TAC
14307 THEN ASM_REWRITE_TAC[UNIONS;IN_ELIM_THM]
14308 THEN MP_TAC(REAL_ARITH`&0< t3 /\ &0< t4==> &0< t3+t4/\ ~(t3+t4= &0)`) THEN RESA_TAC
14309 THEN MRESA1_TAC REAL_LT_INV `t3+t4:real`
14310 THEN MRESA_TAC REAL_LT_MUL [`inv(t3+t4:real)`;`t4:real`]
14311 THEN MRESA_TAC REAL_LT_MUL [`inv(t3+t4:real)`;`t3:real`]
14312 THEN MRESA1_TAC REAL_MUL_LINV `t3+t4:real`
14313 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 - A*C`]
14314 THEN STRIP_TAC
14315 THEN MP_TAC(REAL_ARITH`inv (t3 + t4) * t3  = &1 -inv (t3 + t4) * t4/\ &0< inv (t3 + t4) * t3 ==>
14316 inv (t3 + t4) *  t4 < &1 `)
14317 THEN RESA_TAC THEN ASSUME_TAC th)
14318 THEN MP_TAC(REAL_ARITH`&0<inv (t3 + t4) *  t4==> ~(inv (t3 + t4) *  t4= &0)`) THEN RESA_TAC
14319 THEN EXISTS_TAC`aff_gt {x:real^3} {v, (&1 - inv (t3 + t4:real) * t4) %u + (inv (t3 + t4) * t4) % w}`
14320 THEN STRIP_TAC
14321 THENL[
14322 EXISTS_TAC`inv(t3 + t4:real) * t4`
14323 THEN ASM_REWRITE_TAC[];
14324
14325  MRESA_TAC coplanar_imp_continuous_collinear[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14326 THEN POP_ASSUM (fun th-> MRESA1_TAC th`inv (t3 + t4:real) *  t4`)
14327 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`(&1 - inv (t3 + t4) * t4) % u + (inv (t3 + t4) * t4) % w:real^3`]
14328 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1 - inv (t3 + t4) * t4) % u + (inv (t3 + t4) * t4) % w:real^3`][IN_ELIM_THM]
14329 THEN EXISTS_TAC`t1:real`
14330 THEN EXISTS_TAC`t2:real`
14331 THEN EXISTS_TAC`t3+ t4:real`
14332 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(t3 + t4) % ((&1 - inv (t3 + t4) * t4) % u + (inv (t3 + t4) * t4) % w)
14333 =(t3 + t4 - (inv (t3 + t4) *(t3+t4))* t4) % u + ((inv (t3 + t4)*(t3+t4)) * t4) % w`]
14334 THEN VECTOR_ARITH_TAC];
14335
14336
14337 REWRITE_TAC[UNIONS;IN_ELIM_THM]
14338 THEN STRIP_TAC
14339 THEN POP_ASSUM MP_TAC
14340 THEN ASM_REWRITE_TAC[]
14341 THEN MP_TAC(REAL_ARITH`&0<a==> ~(a= &0)`) THEN RESA_TAC
14342 THEN MRESA_TAC coplanar_imp_continuous_collinear[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14343 THEN POP_ASSUM (fun th-> MRESA1_TAC th`a:real`)
14344 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`(&1 - a) % u + (a) % w:real^3`]
14345 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`][IN_ELIM_THM]
14346 THEN STRIP_TAC
14347 THEN EXISTS_TAC`t1:real`
14348 THEN EXISTS_TAC`t2:real`
14349 THEN EXISTS_TAC`t3 *(&1-a):real`
14350 THEN EXISTS_TAC`t3 * a:real`
14351 THEN ASM_REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 * (&1 - a) + t3 * a=t1+t2+t3`;
14352 VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
14353  t1 % x + t2 % v + (t3 * (&1 - a)) % u + (t3 * a) % w:real^3`]
14354 THEN STRIP_TAC
14355 THEN MATCH_MP_TAC REAL_LT_MUL
14356 THEN ASM_REWRITE_TAC[]
14357 THEN ASM_TAC THEN REAL_ARITH_TAC]);;
14358
14359
14360
14361
14362
14363
14364
14365
14366
14367
14368
14369
14370
14371
14372 let aff_gt_1_3_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
14373 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
14374 /\ sigma_fan x V E u w = v
14375 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
14376 /\ fan80(x,V,E)
14377 ==>  (aff_gt{x} {v,u,w} SUBSET yfan (x,V,E))`,
14378 REPEAT STRIP_TAC
14379 THEN POP_ASSUM (fun th -> MP_TAC th
14380 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14381 THEN DISCH_TAC
14382 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"))
14383 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`]
14384 THEN MRESAL_TAC aff_gt_1_3_eq_unions_aff_gt_1_2[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][UNIONS;IN_ELIM_THM;yfan;xfan]
14385 THEN MRESA_TAC not_cut_in_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;]
14386 THEN POP_ASSUM MP_TAC
14387 THEN SET_TAC[]);;
14388
14389
14390
14391
14392 let aff_gt_1_3_subset_dart_leads_into_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
14393 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
14394 /\ sigma_fan x V E u w = v
14395 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
14396 /\ fan80(x,V,E)
14397 ==>  aff_gt{x} {v,u,w} SUBSET dart_leads_into x V E u w`,
14398 REPEAT STRIP_TAC
14399 THEN POP_ASSUM (fun th -> MP_TAC th
14400 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14401 THEN DISCH_TAC
14402 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"))
14403 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`]
14404 THEN MRESAL_TAC aff_gt_1_3_eq_unions_aff_gt_1_2[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][UNIONS;IN_ELIM_THM;yfan;xfan]
14405 THEN MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
14406 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"EM")
14407 THEN MRESA_TAC DART_LEADS_INTO[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
14408 `u:real^3`;`w:real^3`;]
14409 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
14410 THEN MRESA_TAC rw_dart_avoids_fan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
14411 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"OI")
14412 THEN MP_TAC(REAL_ARITH`&1> h' /\ h' > &0==> -- &1 < h' /\ h'< &1 /\ -- &1 <= h' /\ h'<= &1/\ &0 < h' /\ h' <= &1`) THEN RESA_TAC
14413 THEN MRESA1_TAC ACS_BOUNDS_LT`h':real`
14414 THEN MRESAL_TAC ACS_MONO_LT[`&0`;`h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
14415 THEN MRESA1_TAC COS_ACS `h':real`
14416 THEN ABBREV_TAC`h1= min (h:real) (acs h')/ &2`
14417 THEN MP_TAC(REAL_ARITH`h1= min (h:real) (acs h')/ &2 /\ &0<h /\ &0< acs h' /\ acs h'< pi/ &2==> &0< h1 /\ h1< h /\ h1<pi/ &2/\ h1< acs h' /\ acs h' <= pi /\ &0<= h1`)
14418 THEN ASM_REWRITE_TAC[PI_WORKS] THEN STRIP_TAC
14419 THEN MRESAL_TAC COS_MONO_LT[`h1:real`;`acs h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
14420 THEN MP_TAC(REAL_ARITH`h'< cos h1==> h'<= cos h1`) THEN RESA_TAC
14421 THEN REMOVE_THEN "EM"(fun th-> MRESAL1_TAC th `h1:real`[SET_RULE`~(A={})<=> ?y. y IN A`])
14422 THEN REMOVE_THEN "YEU"(fun th-> MRESA_TAC th [`h1:real`;`y:real^3`])
14423 THEN POP_ASSUM(fun th -> REWRITE_TAC[SYM(th);IN_ELIM_THM;topological_component_yfan;] THEN ASSUME_TAC th) 
14424 THEN MRESA_TAC exists_rw_dart_inter_aff_gt1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`]
14425 THEN POP_ASSUM (fun th-> MRESA1_TAC th`h1:real`)
14426 THEN POP_ASSUM MP_TAC
14427 THEN ABBREV_TAC`a1=min h'' (&1) / &2`
14428 THEN MP_TAC(REAL_ARITH`&0< h'' /\ a1=min h'' (&1) / &2 ==> &0< a1 /\ a1< h'' /\ a1< &1`)
14429 THEN RESA_TAC
14430 THEN STRIP_TAC
14431 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`a1:real`[SET_RULE`~(A={})<=> ?y. y IN A`;INTER;IN_ELIM_THM])
14432 THEN MP_TAC(SET_RULE`y' IN rw_dart_fan x V E (x,u,w,v) (cos h1)/\ rw_dart_fan x V E (x,u,w,v) (cos h1) SUBSET dart_leads_into x V E u w
14433 ==> y' IN dart_leads_into x V E u w`)
14434 THEN RESA_TAC
14435 THEN MP_TAC(SET_RULE`y' IN aff_gt {x} {v, (&1 - a1) % u + a1 % w:real^3} /\ &0< a1 /\  (a1:real) < &1
14436 ==> y' IN {x' | ?u'. (?a. (&0 < a /\ a < &1) /\
14437                 u' = aff_gt {x} {v, (&1 - a) % u + a % w}) /\
14438            x' IN u'}`)
14439 THEN RESA_TAC
14440 THEN MRESA_TAC dart_leads_into_fan_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
14441 THEN MRESA_TAC expand_element_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(dart_leads_into x V E u w):real^3->bool`;`y':real^3`]
14442 THEN MRESA_TAC CONVEX_AFF_GT[`{x:real^3}`;`{v, u, w:real^3}`]
14443 THEN MRESA_TAC CONVEX_CONNECTED[`aff_gt {x} {v, u,w}:real^3->bool`]
14444 THEN MRESA_TAC aff_gt_1_3_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`]
14445 THEN MATCH_MP_TAC CONNECTED_COMPONENT_MAXIMAL
14446 THEN ASM_REWRITE_TAC[]);;
14447
14448
14449
14450
14451
14452
14453
14454 let inter_aff_gt_3_1_is_aff_gt_1_3=prove(`!x v u w:real^3.
14455 ~coplanar {x,v,u,w}
14456 ==>
14457 aff_gt {x,v,u} {w} INTER aff_gt {x,u,w} {v} INTER aff_gt {x,w,v} {u}=aff_gt {x} {v,u,w}`,
14458 GEOM_ORIGIN_TAC `x:real^3`
14459 THEN REPEAT STRIP_TAC
14460 THEN MRESA_TAC notcoplanar_disjoints[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14461 THEN MRESA_TAC notcoplanar_disjoint[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14462 THEN MRESA_TAC AFF_GT_3_1[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14463 THEN MRESA_TAC AFF_GT_3_1[`(vec 0):real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
14464 THEN MRESA_TAC AFF_GT_3_1[`(vec 0):real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
14465 THEN MRESA_TAC AFF_GT_1_3[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14466 THEN MRESA_TAC NOT_COPLANAR_0_4_IMP_INDEPENDENT[`v:real^3`;`u:real^3`;`w:real^3`]
14467 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM;INTER]
14468 THEN REDUCE_VECTOR_TAC
14469 THEN GEN_TAC
14470 THEN EQ_TAC
14471 THENL[
14472 STRIP_TAC
14473 THEN POP_ASSUM MP_TAC 
14474 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t2 % v + t3 % u + t4 % w = t2'' % w + t3'' % v + t4'' % u <=> (t2-t3'') % v + (t3-t4'') % u + (t4-t2'') % w= vec 0`]
14475 THEN STRIP_TAC
14476 THEN MRESAL_TAC INDEPENDENT_3[`v:real^3`;`u:real^3`;`w:real^3`;`t2-t3'':real`; `t3-t4'':real`; `t4 -t2'':real`][REAL_ARITH`A-B= &0<=> A=B`]
14477 THEN POP_ASSUM MP_TAC
14478 THEN POP_ASSUM MP_TAC
14479 THEN POP_ASSUM MP_TAC
14480 THEN REMOVE_ASSUM_TAC
14481 THEN POP_ASSUM MP_TAC
14482 THEN POP_ASSUM MP_TAC
14483 THEN POP_ASSUM MP_TAC 
14484 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t2 % v + t3 % u + t4 % w = t2' % u + t3' % w + t4' % v <=> (t2-t4') % v + (t3-t2') % u + (t4-t3') % w= vec 0`]
14485 THEN STRIP_TAC
14486 THEN MRESAL_TAC INDEPENDENT_3[`v:real^3`;`u:real^3`;`w:real^3`;`t2-t4':real`; `t3-t2':real`; `t4 -t3':real`][REAL_ARITH`A-B= &0<=> A=B`]
14487 THEN REPEAT STRIP_TAC
14488 THEN EXISTS_TAC`t1'':real`
14489 THEN EXISTS_TAC`t3'':real`
14490 THEN EXISTS_TAC`t4'':real`
14491 THEN EXISTS_TAC`t2'':real`
14492 THEN ASM_REWRITE_TAC[REAL_ARITH`t1+t2+t3+t4=t1+t4+t2+t3:real`]
14493 THEN ASM_TAC
14494 THEN REAL_ARITH_TAC;
14495
14496 STRIP_TAC
14497 THEN STRIP_TAC
14498 THENL[EXISTS_TAC`t1:real`
14499 THEN EXISTS_TAC`t2:real`
14500 THEN EXISTS_TAC`t3:real`
14501 THEN EXISTS_TAC`t4:real`
14502 THEN ASM_REWRITE_TAC[];
14503
14504 STRIP_TAC
14505 THENL[
14506 EXISTS_TAC`t1:real`
14507 THEN EXISTS_TAC`t3:real`
14508 THEN EXISTS_TAC`t4:real`
14509 THEN EXISTS_TAC`t2:real`
14510 THEN ASM_REWRITE_TAC[REAL_ARITH`t1  + t3 + t4+ t2:real=t1 + t2 + t3 + t4`]
14511 THEN VECTOR_ARITH_TAC;
14512 EXISTS_TAC`t1:real`
14513 THEN EXISTS_TAC`t4:real`
14514 THEN EXISTS_TAC`t2:real`
14515 THEN EXISTS_TAC`t3:real`
14516 THEN ASM_REWRITE_TAC[REAL_ARITH`t1  + t4+ t2+ t3:real=t1 + t2 + t3 + t4`]
14517 THEN VECTOR_ARITH_TAC]]]);;
14518
14519
14520 let coplanar_cross_dot=prove(`!x:real^3 v:real^3 u:real^3 v1:real^3.
14521 ~coplanar {x,v,u,v1}
14522 ==> ~(((v-x) cross (u-x)) dot (v1-x)= &0)`,
14523 REPEAT GEN_TAC
14524 THEN MATCH_MP_TAC MONO_NOT
14525 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
14526 THEN ONCE_REWRITE_TAC[DOT_SYM;]
14527 THEN REWRITE_TAC[DOT_CROSS_DET]
14528 THEN ONCE_REWRITE_TAC[ COPLANAR_DET_EQ_0]
14529 THEN ASM_REWRITE_TAC[]);;
14530
14531
14532 let CRAMER_LEMMA1 = prove
14533  (`!A:real^N^N x:real^N k:num.
14534         1 <= k /\ k <= dimindex(:N)
14535         ==> det((lambda i j. if j = k then (A**x)$i else A$i$j):real^N^N) =
14536             x$k * det(A)`,
14537   REPEAT GEN_TAC THEN DISCH_TAC THEN REWRITE_TAC[MATRIX_MUL_VSUM] THEN
14538   FIRST_ASSUM(MP_TAC o SYM o SPECL [`transp(A:real^N^N)`; `x:real^N`] o
14539               MATCH_MP CRAMER_LEMMA_TRANSP) THEN
14540   REWRITE_TAC[DET_TRANSP] THEN DISCH_THEN SUBST1_TAC THEN
14541   GEN_REWRITE_TAC LAND_CONV [GSYM DET_TRANSP] THEN AP_TERM_TAC THEN
14542   ASM_SIMP_TAC[CART_EQ; transp; LAMBDA_BETA; MATRIX_MUL_VSUM; row; column;
14543         COND_COMPONENT; VECTOR_MUL_COMPONENT; VSUM_COMPONENT]);;
14544
14545 let aff_gt_3_1_rep_cross_dot=prove(`!x:real^3  v:real^3 u:real^3 w:real^3.
14546 ~coplanar {x,v,u,w} 
14547 /\ &0< ((v-x) cross (u-x)) dot (w-x)
14548
14549 ==> aff_gt {x,v,u} {w} ={y:real^3|  &0< (((v-x) cross (u-x)) dot (y-x)) }`,
14550 REPEAT STRIP_TAC
14551 THEN POP_ASSUM MP_TAC
14552 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14553 THEN MRESA_TAC notcoplanar_disjoints[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14554 THEN DISCH_THEN(LABEL_TAC"YEU")
14555 THEN MRESA_TAC AFF_GT_3_1[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14556 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]
14557 THEN GEN_TAC
14558 THEN EQ_TAC
14559 THENL[STRIP_TAC
14560 THEN ASM_REWRITE_TAC[VECTOR_ARITH`((t1 % x + t2 % v + t3 % u + t4 % w) - x)=((t1+t2+t3+t4) - &1) % x + t2 % (v-x) + t3 % (u-x) + t4 % (w - x)`; REAL_ARITH`&1- &1= &0`]
14561 THEN REDUCE_VECTOR_TAC
14562 THEN REWRITE_TAC[CROSS_LNEG;CROSS_LMUL;CROSS_LADD;CROSS_REFL;DOT_RMUL;DOT_RADD;DOT_CROSS_SELF;]
14563 THEN REDUCE_ARITH_TAC
14564 THEN MATCH_MP_TAC REAL_LT_MUL
14565 THEN ASM_REWRITE_TAC[];
14566 DISCH_THEN(LABEL_TAC"ME")
14567 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`u:real^3`]properties_coordinate) THEN RESA_TAC
14568 THEN MRESA_TAC ORTHONORMAL_IMP_SPANNING[`e1_fan (x:real^3) (v:real^3) (u:real^3)`;`e2_fan (x:real^3)( v:real^3) (u:real^3)`;`e3_fan (x:real^3) (v:real^3) (u:real^3)`;]
14569 THEN POP_ASSUM MP_TAC
14570 THEN ASM_REWRITE_TAC[SPAN_3;EXTENSION] 
14571  THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(x':real^3)-(x:real^3)`th) THEN ASSUME_TAC(th))
14572 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(w:real^3)-(x:real^3)`th)THEN ASSUME_TAC(th))
14573 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(u:real^3)-(x:real^3)`th)THEN ASSUME_TAC(th))
14574 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(v:real^3)-(x:real^3)`th))
14575 THEN REWRITE_TAC[SET_RULE`(a:real^3) IN (:real^3)`;IN_ELIM_THM;VECTOR_ARITH`A-B=C<=>A=C+B:real^3`] 
14576 THEN REPEAT STRIP_TAC
14577 THEN ABBREV_TAC`e1=e1_fan x v u:real^3`
14578 THEN ABBREV_TAC`e2=e2_fan x v u:real^3`
14579 THEN ABBREV_TAC`e3=e3_fan x v u:real^3`
14580 THEN REMOVE_THEN"YEU" MP_TAC
14581 THEN MRESA_TAC ORTHONORMAL_CROSS[`e1:real^3`;`e2:real^3`;`e3:real^3`;]
14582 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x +
14583      t2 % ((u' % e1 + v' % e2 + w' % e3) + x) +
14584      t3 % ((u'' % e1 + v'' % e2 + w'' % e3) + x) +
14585      t4 % ((u''' % e1 + v''' % e2 + w''' % e3) + x)
14586 =     (t2 * u' + t3 * u'' +t4 * u''') % e1 + (t2 * v'+t3*v''+ t4 * v''') % e2 + (t2 * w'+ t3 * w''+ t4 * w''') % e3 +(t1+t2+t3+t4) % x :real^3`;VECTOR_ARITH`((u' % e1 + v' % e2 + w' % e3) + x) - x=u' % e1 + v' % e2 + w' % e3`;CROSS_LMUL;CROSS_RMUL;CROSS_LADD;CROSS_RADD;CROSS_REFL;]
14587 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
14588 THEN ASM_REWRITE_TAC[]
14589 THEN REDUCE_VECTOR_TAC
14590 THEN FIND_ASSUM MP_TAC`orthonormal e1 e2 (e3:real^3)`
14591 THEN REWRITE_TAC[orthonormal]
14592 THEN STRIP_TAC
14593 THEN ASM_REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
14594 THEN ONCE_REWRITE_TAC[DOT_SYM]
14595 THEN ASM_REWRITE_TAC[]
14596 THEN REDUCE_ARITH_TAC
14597 THEN ABBREV_TAC`a1=vector[u':real;u'':real;u''':real]:real^3`
14598 THEN ABBREV_TAC`a2=vector[v':real;v'':real;v''':real]:real^3`
14599 THEN ABBREV_TAC`a3=vector[w':real;w'':real;w''':real]:real^3`
14600 THEN ABBREV_TAC`A=vector[a1;a2;a3:real^3]:real^3^3`
14601 THEN ABBREV_TAC`b=vector[u'''':real;v'''':real;w'''':real]:real^3`
14602 THEN STRIP_TAC
14603 THEN SUBGOAL_THEN`&0< det(A:real^3^3)`ASSUME_TAC
14604 THENL[  
14605 EXPAND_TAC"A"
14606 THEN EXPAND_TAC "a1"
14607 THEN EXPAND_TAC "a2"
14608 THEN EXPAND_TAC "a3"
14609 THEN REWRITE_TAC[DET_3;VECTOR_3]
14610 THEN POP_ASSUM MP_TAC
14611 THEN REAL_ARITH_TAC;
14612 MP_TAC(REAL_ARITH`&0< det (A:real^3^3)==> ~(det A= &0)`) THEN RESA_TAC
14613 THEN MRESA_TAC CRAMER[`A:real^3^3`;]
14614 THEN POP_ASSUM MP_TAC
14615 THEN REWRITE_TAC[SWAP_FORALL_THM]
14616 THEN STRIP_TAC
14617 THEN POP_ASSUM(fun th-> MRESA_TAC th[`b:real^3`])
14618 THEN POP_ASSUM MP_TAC
14619 THEN REWRITE_TAC[MESON[]
14620    ` (!x. p(x) <=> x = a)  <=> (?x. p(x)) /\ (!x. p(x) ==> x = a)`]
14621 THEN STRIP_TAC
14622 THEN POP_ASSUM MP_TAC
14623 THEN POP_ASSUM MP_TAC
14624 THEN DISCH_THEN(LABEL_TAC "LINH1")
14625 THEN DISCH_THEN(LABEL_TAC "LINH2")
14626 THEN REMOVE_THEN "LINH1" MP_TAC
14627 THEN MRESAL_TAC MATRIX_VECTOR_MUL_COMPONENT[`A:real^3^3`;`x'':real^3`][DIMINDEX_3]
14628 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`1:num`[ARITH_RULE`1<=1/\ 1<=3`;LAMBDA_BETA;VECTOR_3] THEN ASSUME_TAC th)
14629 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`2:num`[ARITH_RULE`1<=2/\ 2<=3`;VECTOR_3] THEN ASSUME_TAC th)
14630 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`3:num`[ARITH_RULE`1<=3/\ 3<=3`;VECTOR_3;])
14631 THEN DISCH_TAC
14632 THEN POP_ASSUM(fun th -> MP_TAC th THEN ASSUME_TAC th)
14633 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[VECTOR_3;CART_EQ;]
14634 THEN REWRITE_TAC[DIMINDEX_3]
14635 THEN STRIP_TAC
14636 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`1:num`[ARITH_RULE`1<=1/\ 1<=3`;DOT_SYM;] THEN ASSUME_TAC th)
14637 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`2:num`[ARITH_RULE`1<=2/\ 2<=3`;DOT_SYM;] THEN ASSUME_TAC th)
14638 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`3:num`[ARITH_RULE`1<=3/\ 3<=3`;DOT_SYM;])
14639 THEN POP_ASSUM MP_TAC
14640 THEN POP_ASSUM MP_TAC
14641 THEN POP_ASSUM MP_TAC
14642 THEN POP_ASSUM MP_TAC
14643 THEN EXPAND_TAC"A"
14644 THEN EXPAND_TAC "a1"
14645 THEN EXPAND_TAC "a2"
14646 THEN EXPAND_TAC "a3"
14647 THEN EXPAND_TAC "b"
14648 THEN REWRITE_TAC[VECTOR_3;DOT_3]
14649 THEN DISCH_THEN(LABEL_TAC"MA")
14650 THEN REPEAT STRIP_TAC
14651 THEN EXISTS_TAC`&1- (x'':real^3)$1 - x''$2 -x''$3`
14652 THEN EXISTS_TAC`(x'':real^3)$1`
14653 THEN EXISTS_TAC`(x'':real^3)$2`
14654 THEN EXISTS_TAC`(x'':real^3)$3`
14655 THEN ASM_REWRITE_TAC[REAL_ARITH` &1 - x''$1 - x''$2 - x''$3 + x''$1 + x''$2 + x''$3= &1`;VECTOR_ARITH`(u'''' % e1 + v'''' % e2 + w'''' % e3) + x =
14656  u'''' % e1 + v'''' % e2 + w'''' % e3 + &1 % x`]
14657 THEN REMOVE_THEN "MA" MP_TAC
14658 THEN RESA_TAC
14659 THEN MRESAL_TAC CRAMER_LEMMA1[`A:real^3^3`;`x'':real^3`;`3`][ARITH_RULE`1<=3/\ 3<=3`;DIMINDEX_3;]
14660 THEN POP_ASSUM MP_TAC
14661 THEN REMOVE_ASSUM_TAC
14662 THEN DISCH_THEN(LABEL_TAC"LINH3")
14663 THEN ABBREV_TAC`b1=vector[u':real;u'':real;u'''':real]:real^3`
14664 THEN ABBREV_TAC`b2=vector[v':real;v'':real;v'''':real]:real^3`
14665 THEN ABBREV_TAC`b3=vector[w':real;w'':real;w'''':real]:real^3`
14666 THEN ABBREV_TAC`B=vector[b1;b2;b3:real^3]:real^3^3`
14667 THEN SUBGOAL_THEN`(lambda i j. if j = 3 then (b:real^3)$i else (A:real^3^3)$i$j):real^3^3=B` ASSUME_TAC
14668 THENL[ONCE_ASM_SIMP_TAC[CART_EQ;]
14669 THEN ONCE_ASM_SIMP_TAC[CART_EQ;]
14670 THEN ASM_SIMP_TAC[LAMBDA_BETA;DIMINDEX_3]
14671 THEN REPEAT STRIP_TAC
14672 THEN COND_CASES_TAC
14673 THEN ASM_REWRITE_TAC[]
14674 THEN MP_TAC(ARITH_RULE`1<=i /\ i<= 3==> i=1 \/ i=2 \/ i=3`)
14675 THEN RESA_TAC
14676 THEN EXPAND_TAC"B"
14677 THEN EXPAND_TAC "b1"
14678 THEN EXPAND_TAC "b2"
14679 THEN EXPAND_TAC "b3"
14680 THEN EXPAND_TAC "b"
14681 THEN MP_TAC(ARITH_RULE`1<=i' /\ i'<= 3/\ ~(i'=3)==> i'=1 \/ i'=2`)
14682 THEN EXPAND_TAC "A"
14683 THEN REWRITE_TAC[VECTOR_3]
14684 THEN RESA_TAC
14685 THEN EXPAND_TAC "b1"
14686 THEN EXPAND_TAC "b2"
14687 THEN EXPAND_TAC "b3"
14688 THEN EXPAND_TAC "a3"
14689 THEN EXPAND_TAC "a1"
14690 THEN EXPAND_TAC "a2"
14691 THEN REWRITE_TAC[VECTOR_3];
14692 REMOVE_THEN"LINH3" MP_TAC
14693 THEN ASM_REWRITE_TAC[]
14694 THEN REMOVE_ASSUM_TAC
14695 THEN STRIP_TAC
14696 THEN SUBGOAL_THEN`&0< det(B:real^3^3)`ASSUME_TAC
14697 THENL[REMOVE_ASSUM_TAC
14698 THEN EXPAND_TAC"B"
14699 THEN EXPAND_TAC "b1"
14700 THEN EXPAND_TAC "b2"
14701 THEN EXPAND_TAC "b3"
14702 THEN REWRITE_TAC[DET_3;VECTOR_3]
14703 THEN REMOVE_THEN "ME" MP_TAC
14704 THEN ASM_REWRITE_TAC[VECTOR_ARITH`((u' % e1 + v' % e2 + w' % e3) + x) - x=u' % e1 + v' % e2 + w' % e3`;CROSS_LMUL;CROSS_RMUL;CROSS_LADD;CROSS_RADD;CROSS_REFL;]
14705 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
14706 THEN ASM_REWRITE_TAC[]
14707 THEN REDUCE_VECTOR_TAC
14708 THEN ASM_REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
14709 THEN ONCE_REWRITE_TAC[DOT_SYM]
14710 THEN ASM_REWRITE_TAC[]
14711 THEN REDUCE_ARITH_TAC
14712 THEN REAL_ARITH_TAC;
14713 POP_ASSUM MP_TAC
14714 THEN RESA_TAC
14715 THEN MRESA1_TAC REAL_LT_INV`det (A:real^3^3)`
14716 THEN MRESA1_TAC REAL_MUL_LINV`det (A:real^3^3)`
14717 THEN MRESAL_TAC REAL_LT_MUL[`inv(det(A:real^3^3))`;`(x'':real^3)$3 * det(A:real^3^3)`][REAL_ARITH`A*(B*C)=(A*C)*B`;REAL_ARITH`&1*A=A`]]]]]);;
14718
14719
14720
14721
14722
14723 let OPEN_AFF_GT_1_3=prove(`!x v u w:real^3.
14724 ~coplanar {x,v,u,w}
14725 ==>
14726 open (aff_gt {x} {v,u,w})`,
14727
14728  GEOM_ORIGIN_TAC `x:real^3` THEN
14729  REPEAT STRIP_TAC
14730 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`] THEN DISCH_TAC  THEN
14731 MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`] THEN DISCH_TAC THEN ASSUME_TAC th)
14732 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`vec 0:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14733 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14734 THEN MRESAL_TAC coplanar_cross_dot[`vec 0:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][VECTOR_ARITH`A- vec  0=A`]
14735 THEN MP_TAC (REAL_ARITH`~((v cross u) dot w = &0)==> &0< (v cross u) dot w \/ &0< --((v cross u) dot w)`)
14736 THEN RESA_TAC
14737 THENL[POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN ASSUME_TAC th) THEN ASSUME_TAC th)
14738 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`][VECTOR_ARITH`A- vec  0=A`;]
14739 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`u:real^3`;`w:real^3`;`v:real^3`][VECTOR_ARITH`A- vec  0=A`;]
14740 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`w:real^3`;`v:real^3`;`u:real^3`][VECTOR_ARITH`A- vec  0=A`;]
14741 THEN MATCH_MP_TAC OPEN_INTER
14742 THEN  REWRITE_TAC[REAL_ARITH`&0<A<=> A> &0`; OPEN_HALFSPACE_GT;] 
14743 THEN MATCH_MP_TAC OPEN_INTER
14744 THEN  REWRITE_TAC[ OPEN_HALFSPACE_GT;] ;
14745
14746 POP_ASSUM MP_TAC
14747 THEN REWRITE_TAC[GSYM DOT_LNEG]
14748 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
14749 THEN ASM_TAC
14750 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14751 THEN REPEAT DISCH_TAC
14752 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN ASSUME_TAC th) THEN ASSUME_TAC th)
14753 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`u:real^3`;`v:real^3`;`w:real^3`][VECTOR_ARITH`A- vec  0=A`;]
14754 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`w:real^3`;`u:real^3`;`v:real^3`][VECTOR_ARITH`A- vec  0=A`;]
14755 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`v:real^3`;`w:real^3`;`u:real^3`][VECTOR_ARITH`A- vec  0=A`;]
14756 THEN MATCH_MP_TAC OPEN_INTER
14757 THEN  REWRITE_TAC[REAL_ARITH`&0<A<=> A> &0`; OPEN_HALFSPACE_GT;] 
14758 THEN MATCH_MP_TAC OPEN_INTER
14759 THEN  REWRITE_TAC[ OPEN_HALFSPACE_GT;] ]);;
14760
14761
14762
14763 let OPEN_DIFF_AFF_GE=prove(`!x v u w:real^3.
14764 open ((:real^3) DIFF (aff_ge {x} {v,u,w}))`,
14765 REWRITE_TAC[OPEN_CLOSED;SET_RULE`(:real^3) DIFF ((:real^3) DIFF aff_ge {x} {v, u, w})= aff_ge {x} {v, u, w}`]
14766 THEN REPEAT GEN_TAC
14767 THEN MATCH_MP_TAC CLOSED_AFF_GE
14768 THEN   SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
14769                  IN_INSERT; NOT_IN_EMPTY]);;
14770
14771
14772
14773 let aff_ge_1_3_eq_unions_aff_ge_1_2_and_aff_gt_1_3=prove(`!x  v u w:real^3.
14774 ~coplanar {x,v,u,w}
14775 ==>
14776 aff_ge {x} {v,u,w}= aff_ge {x} {v,u} UNION aff_ge {x} {u,w} UNION aff_ge {x} {w,v} UNION  aff_gt {x} {v,u,w}`,
14777 GEOM_ORIGIN_TAC `x:real^3`
14778 THEN REPEAT STRIP_TAC
14779 THEN MRESA_TAC notcoplanar_disjoints[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14780 THEN MRESA_TAC notcoplanar_disjoint[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14781 THEN MRESA_TAC AFF_GE_1_2[`(vec 0):real^3`;`v:real^3`;`u:real^3`]
14782 THEN MRESA_TAC AFF_GE_1_2[`(vec 0):real^3`;`u:real^3`;`w:real^3`]
14783 THEN MRESA_TAC AFF_GE_1_2[`(vec 0):real^3`;`w:real^3`;`v:real^3`]
14784 THEN MRESA_TAC AFF_GT_1_3[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14785 THEN MRESA_TAC AFF_GE_1_3[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14786 THEN MRESA_TAC NOT_COPLANAR_0_4_IMP_INDEPENDENT[`v:real^3`;`u:real^3`;`w:real^3`]
14787 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM;UNION]
14788 THEN REDUCE_VECTOR_TAC
14789 THEN GEN_TAC
14790 THEN EQ_TAC
14791 THENL[
14792 STRIP_TAC
14793 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0< t2`) THEN RESA_TAC
14794 THENL[
14795
14796 SUBGOAL_THEN ` (?t1 t2' t3'.
14797       &0 <= t2' /\
14798       &0 <= t3' /\
14799       t1 + t2' + t3' = &1 /\
14800       &0 % v + t3 % u + t4 % w = t2' % u + t3' % w:real^3)` ASSUME_TAC
14801 THENL[
14802 REDUCE_VECTOR_TAC
14803 THEN EXISTS_TAC `t1:real`
14804 THEN EXISTS_TAC `t3:real`
14805 THEN EXISTS_TAC `t4:real`
14806 THEN ASM_REWRITE_TAC[]
14807 THEN ASM_TAC
14808 THEN REAL_ARITH_TAC;
14809 ASM_REWRITE_TAC[]];
14810
14811 MP_TAC(REAL_ARITH`&0<= t3==> t3= &0 \/ &0< t3`) THEN RESA_TAC
14812 THENL[
14813 SUBGOAL_THEN ` (?t1 t2' t3'.
14814       &0 <= t2' /\
14815       &0 <= t3' /\
14816       t1 + t2' + t3' = &1 /\
14817       t2 % v + &0 % u + t4 % w = t2' % w + t3' % v:real^3)` ASSUME_TAC
14818 THENL[
14819 REDUCE_VECTOR_TAC
14820 THEN EXISTS_TAC `t1:real`
14821 THEN EXISTS_TAC `t4:real`
14822 THEN EXISTS_TAC `t2:real`
14823 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t2 % v + t4 % w = t4 % w + t2 % v`]
14824 THEN ASM_TAC
14825 THEN REAL_ARITH_TAC;
14826 ASM_REWRITE_TAC[]];
14827
14828 MP_TAC(REAL_ARITH`&0<= t4 ==> t4= &0 \/ &0< t4`) THEN RESA_TAC
14829 THENL[
14830 SUBGOAL_THEN ` (?t1 t2' t3'.
14831       &0 <= t2' /\
14832       &0 <= t3' /\
14833       t1 + t2' + t3' = &1 /\
14834       t2 % v + t3 % u + &0 % w = t2' % v + t3' % u:real^3)` ASSUME_TAC
14835 THENL[
14836 REDUCE_VECTOR_TAC
14837 THEN EXISTS_TAC `t1:real`
14838 THEN EXISTS_TAC `t2:real`
14839 THEN EXISTS_TAC `t3:real`
14840 THEN ASM_REWRITE_TAC[]
14841 THEN ASM_TAC
14842 THEN REAL_ARITH_TAC;
14843 ASM_REWRITE_TAC[]];
14844 SUBGOAL_THEN ` (?t1 t2' t3' t4'.
14845       &0 < t2' /\
14846       &0 < t3' /\
14847       &0 < t4' /\
14848       t1 + t2' + t3' + t4' = &1 /\
14849       t2 % v + t3 % u + t4 % w = t2' % v + t3' % u + t4' % w:real^3)` ASSUME_TAC
14850 THENL[ REDUCE_VECTOR_TAC
14851 THEN EXISTS_TAC `t1:real`
14852 THEN EXISTS_TAC `t2:real`
14853 THEN EXISTS_TAC `t3:real`
14854 THEN EXISTS_TAC `t4:real`
14855 THEN ASM_REWRITE_TAC[]
14856 THEN ASM_TAC
14857 THEN REAL_ARITH_TAC;
14858 ASM_REWRITE_TAC[]]]]];
14859
14860 STRIP_TAC
14861 THENL[
14862 EXISTS_TAC `t1:real`
14863 THEN EXISTS_TAC `t2:real`
14864 THEN EXISTS_TAC `t3:real`
14865 THEN EXISTS_TAC `&0:real`
14866 THEN REDUCE_VECTOR_TAC
14867 THEN ASM_REWRITE_TAC[]
14868 THEN ASM_TAC
14869 THEN REAL_ARITH_TAC;
14870
14871 EXISTS_TAC `t1:real`
14872 THEN EXISTS_TAC `&0:real`
14873 THEN EXISTS_TAC `t2:real`
14874 THEN EXISTS_TAC `t3:real`
14875 THEN REDUCE_VECTOR_TAC
14876 THEN ASM_REWRITE_TAC[]
14877 THEN ASM_TAC
14878 THEN REAL_ARITH_TAC;
14879
14880 EXISTS_TAC `t1:real`
14881 THEN EXISTS_TAC `t3:real`
14882 THEN EXISTS_TAC `&0:real`
14883 THEN EXISTS_TAC `t2:real`
14884 THEN REDUCE_VECTOR_TAC
14885 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t2 % w + t3 % v = t3 % v + t2 % w:real^3`]
14886 THEN ASM_TAC
14887 THEN REAL_ARITH_TAC;
14888
14889 EXISTS_TAC `t1:real`
14890 THEN EXISTS_TAC `t2:real`
14891 THEN EXISTS_TAC `t3:real`
14892 THEN EXISTS_TAC `t4:real`
14893 THEN ASM_REWRITE_TAC[]
14894 THEN ASM_TAC
14895 THEN REAL_ARITH_TAC]]);;
14896
14897
14898         
14899
14900 let cut_aff_gt_1_3_connected=prove(`!x y z v u w:real^3 s:real^3->bool.
14901         connected s /\ ~coplanar {x,v,u,w} 
14902         /\  y IN s /\ z IN s /\ y IN aff_gt {x} {v,u,w} /\ ~(z IN aff_gt {x} {v,u,w})
14903         ==> ?t. t IN s /\ t IN aff_ge {x} {v,u} UNION aff_ge {x} {u,w} UNION aff_ge {x} {w,v}`,
14904   REPEAT STRIP_TAC THEN
14905   FIRST_X_ASSUM(MP_TAC o GEN_REWRITE_RULE I [connected]) THEN
14906   REWRITE_TAC[NOT_EXISTS_THM] THEN DISCH_THEN(MP_TAC o SPECL
14907    [`aff_gt {x} {v,u,w:real^3}`; `(:real^3) DIFF (aff_ge {x} {v,u,w})`])
14908 THEN MRESA_TAC OPEN_AFF_GT_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14909  THEN REWRITE_TAC[ OPEN_DIFF_AFF_GE] THEN
14910   ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM] 
14911 THEN STRIP_TAC 
14912 THEN
14913   REWRITE_TAC[EXTENSION; IN_ELIM_THM; IN_INTER; NOT_IN_EMPTY; SUBSET;
14914               IN_UNION; ] 
14915 THEN MRESA_TAC aff_ge_1_3_eq_unions_aff_ge_1_2_and_aff_gt_1_3
14916 [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14917 THEN REMOVE_ASSUM_TAC
14918 THEN POP_ASSUM  MP_TAC
14919 THEN  REWRITE_TAC[NOT_EXISTS_THM;UNION;DIFF;IN_ELIM_THM;DE_MORGAN_THM]
14920 THEN DISCH_THEN (LABEL_TAC"A")
14921 THEN STRIP_TAC
14922 THENL[
14923 REPEAT STRIP_TAC
14924 THEN REMOVE_THEN "A"(fun th -> MRESA1_TAC th`x':real^3`)
14925 THEN SET_TAC[];
14926 STRIP_TAC
14927 THENL[
14928
14929 REPEAT STRIP_TAC
14930 THEN REMOVE_THEN "A"(fun th -> MRESA1_TAC th`x':real^3`)
14931 THEN SET_TAC[];
14932
14933 STRIP_TAC
14934 THENL[
14935 ASM_MESON_TAC[];
14936 REWRITE_TAC[NOT_FORALL_THM;DE_MORGAN_THM]
14937 THEN EXISTS_TAC`z:real^3`
14938 THEN REMOVE_THEN "A"(fun th -> MRESA1_TAC th`z:real^3`)
14939 THEN SET_TAC[]]]]);;
14940
14941
14942
14943
14944
14945
14946 let AFF_GE_SUBSET_XFAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) u:real^3 w:real^3.
14947  {u,w} IN E
14948 ==> 
14949 aff_ge {x} {u,w} SUBSET xfan(x:real^3,V:real^3->bool,E)`,
14950 ASM_REWRITE_TAC[xfan; SUBSET;IN_ELIM_THM]
14951 THEN REPEAT STRIP_TAC
14952 THEN EXISTS_TAC`{u,w:real^3}`
14953 THEN ASM_REWRITE_TAC[]
14954 THEN ASM_TAC THEN SET_TAC[IN]);;
14955
14956
14957 let notcoplanar_4point_aff_gt_3_1_not_empty=prove(`!x v u w:real^3.
14958 ~coplanar {x,v,u,w}
14959 ==> ~(aff_gt {x,v,u} {w} INTER aff_gt {x,u,w} {v} INTER aff_gt {x,w,v} {u} = {})`,
14960 REWRITE_TAC[SET_RULE`~(A={})<=> ?y. y IN A`]
14961 THEN REPEAT STRIP_TAC
14962 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`] THEN DISCH_TAC  THEN
14963 MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`] THEN DISCH_TAC THEN ASSUME_TAC th)
14964 THEN MRESA_TAC coplanar_cross_dot[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14965 THEN MP_TAC(REAL_ARITH` ~(((v - x) cross (u - x)) dot (w - x) = &0)
14966 ==> &0 <((v - x) cross (u - x)) dot (w - x) \/  &0< --(((v - x) cross (u - x)) dot (w - x)) `)
14967 THEN RESA_TAC
14968 THENL[
14969 POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN ASSUME_TAC th) THEN ASSUME_TAC th)
14970 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14971 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
14972 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`][INTER; IN_ELIM_THM]
14973 THEN EXISTS_TAC`&1/ &3 % v + &1/ &3 % u+ &1/ &3 % w:real^3`
14974 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 / &3 % v + &1 / &3 % u + &1 / &3 % w) - x= &1 / &3 % (v-x) + &1 / &3 % (u-x) + &1 / &3 % (w - x)`;DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
14975 THEN REDUCE_ARITH_TAC
14976 THEN REPEAT STRIP_TAC
14977 THEN MATCH_MP_TAC REAL_LT_MUL
14978 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1/ &3`] ;
14979 POP_ASSUM MP_TAC
14980 THEN REWRITE_TAC[GSYM DOT_LNEG]
14981 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
14982 THEN DISCH_TAC
14983 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN ASSUME_TAC th) THEN ASSUME_TAC th)
14984 THEN ASM_TAC
14985 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14986 THEN REPEAT STRIP_TAC
14987 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
14988 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
14989 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`][INTER; IN_ELIM_THM]
14990 THEN EXISTS_TAC`&1/ &3 % v + &1/ &3 % u+ &1/ &3 % w:real^3`
14991 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 / &3 % v + &1 / &3 % u + &1 / &3 % w) - x= &1 / &3 % (v-x) + &1 / &3 % (u-x) + &1 / &3 % (w - x)`;DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
14992 THEN REDUCE_ARITH_TAC
14993 THEN REPEAT STRIP_TAC
14994 THEN MATCH_MP_TAC REAL_LT_MUL
14995 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1/ &3`]]) ;;
14996
14997
14998 let notcoplanar_4point_aff_gt_1_3_not_empty=prove(`!x v u w:real^3.
14999 ~coplanar {x,v,u,w}
15000 ==> ~(aff_gt {x} {v,u,w}  = {})`,
15001 REPEAT GEN_TAC THEN STRIP_TAC
15002 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15003 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
15004 THEN POP_ASSUM MP_TAC
15005 THEN SET_TAC[notcoplanar_4point_aff_gt_3_1_not_empty]);;
15006
15007
15008 let KVQWYDL_lemma1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
15009 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {w,v} IN E
15010 /\ sigma_fan x V E u w = v
15011 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15012 /\ fan80(x,V,E)
15013 ==>  aff_gt{x} {v,u,w} = dart_leads_into x V E u w`,
15014 REPEAT STRIP_TAC
15015 THEN POP_ASSUM (fun th -> MP_TAC th
15016 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
15017 THEN DISCH_TAC
15018 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"))
15019 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`]
15020 THEN MATCH_MP_TAC (SET_RULE`A SUBSET B /\ B SUBSET A==> A=B`)
15021 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`]
15022 THEN MATCH_MP_TAC (SET_RULE`~(?z. z IN A /\ ~(z IN B))==> A SUBSET B`)
15023 THEN STRIP_TAC
15024 THEN MRESA_TAC connected_dart_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` u:real^3`;` w:real^3`]
15025 THEN POP_ASSUM MP_TAC
15026 THEN MRESAL_TAC notcoplanar_4point_aff_gt_1_3_not_empty[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][SET_RULE`~(A={})<=> ?y. y IN A`]
15027 THEN STRIP_TAC
15028 THEN MP_TAC(SET_RULE`aff_gt {x} {v, u, w} SUBSET dart_leads_into x V E u w /\ y IN aff_gt {x} {v, u, w}
15029 ==>  y IN dart_leads_into x V E u w `)
15030 THEN RESA_TAC
15031 THEN MRESA_TAC cut_aff_gt_1_3_connected[`x:real^3`;`y:real^3`;`z:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`(dart_leads_into x V E u w):real^3->bool`]
15032 THEN MRESA_TAC dart_leads_into_fan_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
15033 THEN MRESA_TAC topological_component_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (dart_leads_into x V E u w):real^3->bool`]
15034 THEN MP_TAC (SET_RULE`t IN dart_leads_into x V E u w /\ dart_leads_into x V E u w SUBSET yfan (x,V,E)
15035 ==>t IN  yfan (x,V,E)`)
15036 THEN RESA_TAC
15037 THEN POP_ASSUM MP_TAC
15038 THEN REWRITE_TAC[yfan]
15039 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
15040 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
15041 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
15042 THEN ASM_TAC
15043 THEN SET_TAC[]);;
15044
15045
15046
15047
15048
15049 let point_in_yfan_is_not_inv_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool z:real^3 u:real^3.
15050 FAN(x,V,E) /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15051 /\ U IN topological_component_yfan (x,V,E)
15052 /\ z IN U
15053 /\ u IN V
15054 ==> ~(u=z)`,
15055 REPEAT STRIP_TAC
15056 THEN POP_ASSUM MP_TAC
15057 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
15058 THEN MRESA_TAC zpoint_in_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`; `z:real^3`;]
15059 THEN MRESA_TAC v_subset_xfan[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
15060 THEN ASM_TAC THEN REWRITE_TAC[yfan]
15061 THEN SET_TAC[]);;
15062
15063
15064
15065
15066 let point_in_aff_ge_1_1=prove(`!(x:real^3) (v:real^3).
15067 ~(x=v)
15068 ==>
15069 x IN aff_ge {x} {v}
15070 /\ v IN aff_ge {x} {v}`,
15071
15072 REPEAT GEN_TAC THEN STRIP_TAC 
15073   THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`]AFF_GE_1_1)
15074 THEN RESA_TAC
15075                 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
15076 THEN STRIP_TAC
15077 THENL[ EXISTS_TAC`&1:real`
15078 THEN EXISTS_TAC`&0:real`
15079 THEN REDUCE_VECTOR_TAC
15080 THEN REAL_ARITH_TAC;  
15081
15082  EXISTS_TAC`&0:real`
15083 THEN EXISTS_TAC`&1:real`
15084 THEN REDUCE_VECTOR_TAC
15085 THEN REAL_ARITH_TAC]);;
15086
15087
15088
15089 let POINT_IN_AFF_GE_IMP_IN_EDGE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 u1:real^3.
15090 FAN(x,V,E)/\ {v,u} IN E /\ u1 IN V /\ ~(x=u1)
15091 /\ u1 IN aff_ge {x} {v,u}
15092 ==> u1 IN {v,u}`,
15093
15094 REPEAT STRIP_TAC
15095 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
15096 ` (v:real^3)`]
15097 THEN MRESA_TAC aff_ge_1_1_subset_aff_ge_fan[`x:real^3`;`v:real^3`;`u:real^3`;`u1:real^3`]
15098 THEN MP_TAC(SET_RULE`aff_ge {x} {u1} SUBSET aff_ge {x} {v, u}==>
15099 aff_ge {x} {u1} INTER aff_ge {x} {v, u:real^3}=aff_ge {x} {u1}`)
15100 THEN RESA_TAC
15101 THEN MP_TAC(SET_RULE`?v. v IN V /\ {u1} = {v:real^3} <=> u1 IN V`)
15102 THEN ASM_REWRITE_TAC[]
15103 THEN DISCH_TAC
15104 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
15105 THEN REWRITE_TAC[FAN;fan7]
15106 THEN STRIP_TAC
15107 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`{u1:real^3}`;`{v,u:real^3}`][UNION;IN_ELIM_THM;])
15108 THEN POP_ASSUM MP_TAC
15109 THEN DISJ_CASES_TAC(SET_RULE`{u1} INTER {v,u:real^3}= {}\/ u1 IN {v, u}`)
15110 THENL [ASM_REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1;SET_RULE`{u % x| u= &1} ={&1 %x}`; VECTOR_ARITH`&1 %X=X`]
15111 THEN STRIP_TAC
15112 THEN MRESAL_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(u1:real^3) `][IN_SING];
15113 ASM_REWRITE_TAC[]]);;
15114
15115
15116
15117
15118
15119
15120
15121 let POINT_IN_CLOSURE_AFF_GT_1_2=prove(`!x:real^3 v:real^3 u:real^3.
15122 ~(x=v) /\ ~(x=u) /\ ~(v=u) 
15123 ==> v IN closure(aff_gt {x} {v,u})`,
15124 REPEAT GEN_TAC
15125 THEN GEOM_ORIGIN_TAC `x:real^3`
15126 THEN REPEAT STRIP_TAC
15127 THEN MP_TAC(SET_RULE`~((vec 0:real^3) =v) /\ ~((vec 0:real^3)=u) /\ ~(v=u:real^3) ==> DISJOINT {vec 0} {v,u}/\ ~(u=v)`) THEN RESA_TAC
15128 THEN MRESAL_TAC AFF_GT_1_2[`vec 0:real^3`;`v:real^3`;`u:real^3`][CLOSURE_APPROACHABLE;IN_ELIM_THM;dist]
15129 THEN REDUCE_VECTOR_TAC
15130 THEN REPEAT STRIP_TAC
15131 THEN ABBREV_TAC`t3=min (inv(norm(u-v:real^3)) * e) (&1)/ &2:real`
15132 THEN ABBREV_TAC`t2= &1- t3:real`
15133 THEN MRESA_TAC IMP_NORM_FAN[`u:real^3`;`v:real^3`] 
15134 THEN MRESA_TAC REAL_LT_MUL[`inv (norm (u - v:real^3))`;`e:real`]
15135 THEN MP_TAC(REAL_ARITH`&0 < inv (norm (u - v:real^3)) * e /\ t3=min (inv(norm(u-v:real^3)) * e) (&1)/ &2
15136 ==> &0<= t3/\ &0< t3 /\ t3< &1 /\ &0< &1- t3 /\ t3< inv (norm (u - v:real^3)) * e `) THEN RESA_TAC
15137 THEN MRESA1_TAC REAL_ABS_REFL`t3:real`
15138 THEN MRESAL_TAC REAL_LT_LMUL[`norm (u - v:real^3)`;`t3:real`;`inv (norm (u - v:real^3)) * e:real`][REAL_ARITH`A*B*C=(B*A)*C`]
15139 THEN EXISTS_TAC`t2%v +t3 % u:real^3`
15140 THEN STRIP_TAC
15141 THENL[
15142 EXISTS_TAC`&0`
15143 THEN EXISTS_TAC `t2:real`
15144 THEN EXISTS_TAC `t3:real`
15145 THEN ASM_REWRITE_TAC[]
15146 THEN EXPAND_TAC "t2"
15147 THEN REAL_ARITH_TAC;
15148 EXPAND_TAC "t2"
15149 THEN REWRITE_TAC[VECTOR_ARITH`((&1 - t3) % v + t3 % u) - v=t3% (u-v)`;NORM_MUL]
15150 THEN ASM_REWRITE_TAC[]
15151 THEN POP_ASSUM MP_TAC
15152 THEN REAL_ARITH_TAC]);;
15153
15154
15155
15156
15157 let KVQWYDL_lemma2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 u1:real^3 w1:real^3.
15158 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {w,v} IN E /\ {u1,w1} IN E
15159 /\ sigma_fan x V E u w = v
15160 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15161 /\ fan80(x,V,E)
15162 /\   aff_gt{x} {v,u,w} = dart_leads_into x V E u1 w1
15163 ==> u1 IN {v,u,w}`,
15164
15165
15166 REPEAT STRIP_TAC
15167 THEN POP_ASSUM MP_TAC
15168 THEN POP_ASSUM (fun th -> MP_TAC th
15169 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
15170 THEN DISCH_TAC
15171 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"))
15172 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`]
15173 THEN MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u1:real^3`;`w1:real^3`]
15174 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"EM")
15175 THEN MRESA_TAC DART_LEADS_INTO[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
15176 `u1:real^3`;`w1:real^3`;]
15177 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
15178 THEN MRESA_TAC rw_dart_avoids_fan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u1:real^3`;`w1:real^3`]
15179 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"OI")
15180 THEN MP_TAC(REAL_ARITH`&1> h' /\ h' > &0==> -- &1 < h' /\ h'< &1 /\ -- &1 <= h' /\ h'<= &1/\ &0 < h' /\ h' <= &1`) THEN RESA_TAC
15181 THEN MRESA1_TAC ACS_BOUNDS_LT`h':real`
15182 THEN MRESAL_TAC ACS_MONO_LT[`&0`;`h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
15183 THEN MRESA1_TAC COS_ACS `h':real`
15184 THEN ABBREV_TAC`h1= min (h:real) (acs h')/ &2`
15185 THEN MP_TAC(REAL_ARITH`h1= min (h:real) (acs h')/ &2 /\ &0<h /\ &0< acs h' /\ acs h'< pi/ &2==> &0< h1 /\ h1< h /\ h1<pi/ &2/\ h1< acs h' /\ acs h' <= pi /\ &0<= h1`)
15186 THEN ASM_REWRITE_TAC[PI_WORKS] THEN STRIP_TAC
15187 THEN MRESAL_TAC COS_MONO_LT[`h1:real`;`acs h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
15188 THEN MP_TAC(REAL_ARITH`h'< cos h1==> h'<= cos h1`) THEN RESA_TAC
15189 THEN REMOVE_THEN "EM"(fun th-> MRESAL1_TAC th `h1:real`[SET_RULE`~(A={})<=> ?y. y IN A`])
15190 THEN REMOVE_THEN "YEU"(fun th-> MRESA_TAC th [`h1:real`;`y:real^3`])
15191 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u1:real^3`;`w1:real^3`]
15192 THEN POP_ASSUM MP_TAC 
15193 THEN MRESA_TAC properties_of_set_of_edge_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u1:real^3`;`w1:real^3`]
15194 THEN DISCH_TAC
15195 THEN MRESA_TAC properties_of_set_of_edge_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u1:real^3`;`sigma_fan x V E u1 w1:real^3`]
15196 THEN MRESA_TAC aff_gt_in_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`sigma_fan x V E u1 w1:real^3`;`u1:real^3`;`w1:real^3`;`y:real^3`;`h1:real`]
15197 THEN POP_ASSUM MP_TAC
15198 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15199 THEN ASM_REWRITE_TAC[]
15200 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15201 THEN STRIP_TAC
15202 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
15203 ` (u1:real^3)`]
15204 THEN MRESA_TAC dart_leads_into_fan_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`u1:real^3`;`w1:real^3`]
15205 THEN MP_TAC (SET_RULE`y IN  rw_dart_fan x V E (x,u1,w1,sigma_fan x V E u1 w1) (cos h1)
15206 /\ rw_dart_fan x V E (x,u1,w1,sigma_fan x V E u1 w1) (cos h1) SUBSET
15207       dart_leads_into x V E u1 w1
15208 ==> y IN dart_leads_into x V E u1 w1`)
15209 THEN RESA_TAC
15210 THEN MRESA_TAC point_in_yfan_is_not_inv_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `(dart_leads_into x V E u1 w1):real^3->bool`;`y:real^3`;`u1:real^3`]
15211 THEN MRESA_TAC nonsetedge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
15212 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(dart_leads_into x V E u1 w1):real^3->bool`;` y:real^3`]
15213 THEN DISCH_THEN(fun th-> ASSUME_TAC (SYM th))
15214 THEN MP_TAC (SET_RULE`aff_gt {x} {u1, y} SUBSET
15215       rw_dart_fan x V E (x,u1,w1,sigma_fan x V E u1 w1) (cos h1)
15216 /\ aff_gt {x} {v, u, w} = dart_leads_into x V E u1 w1
15217 /\ rw_dart_fan x V E (x,u1,w1,sigma_fan x V E u1 w1) (cos h1) SUBSET
15218       dart_leads_into x V E u1 w1
15219 ==> aff_gt {x} {u1, y} SUBSET aff_gt {x} {v, u, w}`)
15220 THEN RESA_TAC
15221 THEN MRESA_TAC aff_ge_1_3_eq_unions_aff_ge_1_2_and_aff_gt_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15222 THEN MP_TAC (SET_RULE`aff_gt {x} {u1, y} SUBSET aff_gt {x} {v, u, w}
15223 /\ aff_ge {x} {v, u, w} =
15224       aff_ge {x} {v, u} UNION
15225       aff_ge {x} {u, w} UNION
15226       aff_ge {x} {w, v} UNION
15227       aff_gt {x} {v, u, w:real^3}
15228 ==> aff_gt {x} {u1, y} SUBSET aff_ge {x} {v, u, w}`)
15229 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15230 THEN RESA_TAC
15231 THEN SUBGOAL_THEN`closed (aff_ge {x:real^3} {v, u, w})` ASSUME_TAC
15232 THENL[MATCH_MP_TAC      CLOSED_AFF_GE
15233 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
15234                  IN_INSERT; NOT_IN_EMPTY];
15235 MRESA1_TAC CLOSURE_EQ`aff_ge {x:real^3} {v, u, w}`
15236 THEN MRESA_TAC SUBSET_CLOSURE[`aff_gt {x} {u1, y:real^3}`;`aff_ge {x:real^3} {v, u, w}`]
15237 THEN MRESA_TAC POINT_IN_CLOSURE_AFF_GT_1_2[`x:real^3`;`u1:real^3`;`y:real^3`]
15238 THEN MP_TAC (SET_RULE`u1 IN closure(aff_gt {x} {u1, y})
15239 /\ closure (aff_gt {x} {u1, y}) SUBSET aff_ge {x} {v, u, w}
15240 ==> u1 IN aff_ge {x} {v, u, w:real^3}`)
15241 THEN ASM_REWRITE_TAC[]
15242  THEN MRESA_TAC aff_ge_1_3_eq_unions_aff_ge_1_2_and_aff_gt_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15243 THEN MRESAL_TAC topological_component_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (dart_leads_into x V E u1 w1):real^3->bool`][yfan]
15244 THEN MRESA_TAC v_subset_xfan[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
15245 THEN STRIP_TAC
15246 THEN MP_TAC(SET_RULE`aff_gt {x} {v, u, w} SUBSET (:real^3) DIFF xfan (x,V,E) /\
15247  V SUBSET xfan (x,V,E)
15248 /\ u1 IN V
15249 /\ u1 IN
15250  aff_ge {x} {v, u} UNION
15251  aff_ge {x} {u, w} UNION
15252  aff_ge {x} {w, v} UNION
15253  aff_gt {x} {v, u, w}
15254 ==> u1 IN
15255  aff_ge {x} {v, u} UNION
15256  aff_ge {x} {u, w} UNION
15257  aff_ge {x} {w, v} `)
15258 THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM]
15259 THEN STRIP_TAC
15260 THENL[
15261 MRESA_TAC POINT_IN_AFF_GE_IMP_IN_EDGE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`; `u:real^3`;`u1:real^3`]
15262 THEN POP_ASSUM MP_TAC
15263 THEN SET_TAC[];MRESA_TAC POINT_IN_AFF_GE_IMP_IN_EDGE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`; `w:real^3`;`u1:real^3`]
15264 THEN POP_ASSUM MP_TAC
15265 THEN SET_TAC[];
15266 MRESA_TAC POINT_IN_AFF_GE_IMP_IN_EDGE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`; `v:real^3`;`u1:real^3`]
15267 THEN POP_ASSUM MP_TAC
15268 THEN SET_TAC[]]]);;
15269
15270
15271
15272
15273 let DISJOINT_RW_DART_FAN_SAME_NODE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 h1:real h2:real.
15274 FAN(x,V,E)/\ {u,w} IN E /\ {u,w1} IN E/\ ~(w=w1)
15275 ==> rw_dart_fan x V E (x,u,w,sigma_fan x V E u w) (cos h1)
15276 INTER rw_dart_fan x V E (x,u,w1,sigma_fan x V E u w1) (cos h2)= {}`,
15277 REPEAT STRIP_TAC
15278 THEN MRESA_TAC disjoint_fan2[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`;` (w1:real^3)`]
15279 THEN REWRITE_TAC[rw_dart_fan]
15280 THEN POP_ASSUM MP_TAC
15281 THEN SET_TAC[]);;
15282
15283
15284
15285
15286 let condition_unique_by_dart_leads_into=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) w:real^3 u:real^3 w1:real^3.
15287 FAN(x,V,E)/\ {u,w} IN E /\ {u,w1} IN E
15288 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15289 /\ fan80(x,V,E)
15290 /\ dart_leads_into x V E u w SUBSET w_dart_fan x V E (x,u,w,sigma_fan x V E u w)
15291 /\  dart_leads_into x V E u w  = dart_leads_into x V E u w1 
15292 ==> w= w1`,
15293
15294 REPEAT STRIP_TAC
15295 THEN MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w1:real^3`]
15296 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"EM")
15297 THEN MRESA_TAC DART_LEADS_INTO[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
15298 `u:real^3`;`w1:real^3`;]
15299 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"YEU")
15300 THEN MRESA_TAC rw_dart_avoids_fan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w1:real^3`]
15301 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"OI")
15302 THEN MP_TAC(REAL_ARITH`&1> h' /\ h' > &0==> -- &1 < h' /\ h'< &1 /\ -- &1 <= h' /\ h'<= &1/\ &0 < h' /\ h' <= &1`) THEN RESA_TAC
15303 THEN MRESA1_TAC ACS_BOUNDS_LT`h':real`
15304 THEN MRESAL_TAC ACS_MONO_LT[`&0`;`h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
15305 THEN MRESA1_TAC COS_ACS `h':real`
15306 THEN ABBREV_TAC`h1= min (h:real) (acs h')/ &2`
15307 THEN MP_TAC(REAL_ARITH`h1= min (h:real) (acs h')/ &2 /\ &0<h /\ &0< acs h' /\ acs h'< pi/ &2==> &0< h1 /\ h1< h /\ h1<pi/ &2/\ h1< acs h' /\ acs h' <= pi /\ &0<= h1`)
15308 THEN ASM_REWRITE_TAC[PI_WORKS] THEN STRIP_TAC
15309 THEN MRESAL_TAC COS_MONO_LT[`h1:real`;`acs h':real`][ACS_0;REAL_ARITH`-- &1 <= &0`]
15310 THEN MP_TAC(REAL_ARITH`h'< cos h1==> h'<= cos h1`) THEN RESA_TAC
15311 THEN REMOVE_THEN "EM"(fun th-> MRESAL1_TAC th `h1:real`[SET_RULE`~(A={})<=> ?y. y IN A`])
15312 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[rw_dart_fan] THEN STRIP_TAC THEN ASSUME_TAC th)
15313 THEN REMOVE_THEN "YEU"(fun th-> MRESA_TAC th [`h1:real`;`y:real^3`])
15314 THEN MP_TAC(SET_RULE` dart_leads_into x V E u w SUBSET w_dart_fan x V E (x,u,w,sigma_fan x V E u w)
15315 /\  dart_leads_into x V E u w  = dart_leads_into x V E u w1 
15316 /\ rw_dart_fan x V E (x,u,w1,sigma_fan x V E u w1) (cos h1) SUBSET
15317       dart_leads_into x V E u w1
15318 /\ y IN rw_dart_fan x V E (x,u,w1,sigma_fan x V E u w1) (cos h1)
15319 /\ y IN
15320       w_dart_fan x V E (x,u,w1,sigma_fan x V E u w1) INTER
15321       rcone_fan x u (cos h1)
15322 ==> ~(w_dart_fan x V E (x,u,w,sigma_fan x V E u w) INTER w_dart_fan x V E (x,u,w1,sigma_fan x V E u w1) ={})`)
15323 THEN RESA_TAC
15324 THEN DISJ_CASES_TAC(SET_RULE`~(w=w1:real^3)\/ w=w1`)
15325 THENL[
15326 MRESA_TAC disjoint_fan2[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`;` (w1:real^3)`];
15327 ASM_REWRITE_TAC[]]);;
15328
15329
15330
15331 let PROPERTIES_TRIANGLE_FAN_lemma1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
15332 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {w,v} IN E 
15333 /\ sigma_fan x V E u w = v
15334 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15335 /\ fan80(x,V,E)
15336 ==> sigma_fan x V E v u = w `,
15337
15338 REPEAT STRIP_TAC
15339 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
15340 ` (v:real^3)`]
15341 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15342 ` (u:real^3)`]  
15343 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15344 ` (v:real^3)`]  
15345 THEN POP_ASSUM MP_TAC
15346 THEN POP_ASSUM MP_TAC
15347 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15348 THEN ASM_REWRITE_TAC[]
15349 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15350 THEN REPEAT STRIP_TAC
15351 THEN MP_TAC(SET_RULE`u IN set_of_edge v V E /\ w IN set_of_edge v V E /\ ~(u=w)==> ~( set_of_edge v V E= {u:real^3}) `)
15352 THEN RESA_TAC
15353 THEN  MATCH_MP_TAC UNIQUE_SIGMA_FAN
15354 THEN ASM_REWRITE_TAC[]
15355 THEN REPEAT STRIP_TAC
15356 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;]
15357 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
15358 THEN POP_ASSUM MP_TAC
15359 THEN MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`]
15360 THEN POP_ASSUM MP_TAC
15361 THEN REAL_ARITH_TAC);;
15362
15363
15364 let PROPERTIES_TRIANGLE_FAN_lemma2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
15365 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {w,v} IN E 
15366 /\ sigma_fan x V E u w = v
15367 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15368 /\ fan80(x,V,E)
15369 ==> sigma_fan x V E w v=u`,
15370 REPEAT STRIP_TAC
15371 THEN MRESA_TAC PROPERTIES_TRIANGLE_FAN_lemma1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`]
15372 THEN MRESA_TAC PROPERTIES_TRIANGLE_FAN_lemma1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`; `u:real^3`]);;
15373
15374
15375 let PROPERTIES_TRIANGLE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
15376 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {w,v} IN E 
15377 /\ sigma_fan x V E u w = v
15378 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15379 /\ fan80(x,V,E)
15380 ==> sigma_fan x V E v u = w/\ sigma_fan x V E w v=u`,
15381 MESON_TAC[PROPERTIES_TRIANGLE_FAN_lemma1; PROPERTIES_TRIANGLE_FAN_lemma2]);;
15382
15383
15384
15385
15386
15387 let inter_aff_gt_3_1_is_aff_gt_2_2=prove(`!x v u w:real^3.
15388 ~coplanar {x,v,u,w}
15389 ==>
15390 aff_gt {x,v,u} {w} INTER aff_gt {x,u,w} {v} =aff_gt {x,u} {v,w}`,
15391 GEOM_ORIGIN_TAC `x:real^3`
15392 THEN REPEAT STRIP_TAC
15393 THEN MRESA_TAC notcoplanar_disjoints[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15394 THEN MRESA_TAC notcoplanar_disjoint[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15395 THEN MRESA_TAC AFF_GT_3_1[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15396 THEN MRESA_TAC AFF_GT_3_1[`(vec 0):real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
15397 THEN MRESA_TAC AFF_GT_2_2[`(vec 0):real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
15398 THEN MRESA_TAC NOT_COPLANAR_0_4_IMP_INDEPENDENT[`v:real^3`;`u:real^3`;`w:real^3`]
15399 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM;INTER]
15400 THEN REDUCE_VECTOR_TAC
15401 THEN GEN_TAC
15402 THEN EQ_TAC
15403 THENL[
15404 STRIP_TAC
15405 THEN POP_ASSUM MP_TAC 
15406 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t2 % v + t3 % u + t4 % w = t2' % u + t3' % w + t4' % v <=> (t2-t4') % v + (t3-t2') % u + (t4-t3') % w= vec 0`]
15407 THEN STRIP_TAC
15408 THEN MRESAL_TAC INDEPENDENT_3[`v:real^3`;`u:real^3`;`w:real^3`;`t2-t4':real`; `t3-t2':real`; `t4 -t3':real`][REAL_ARITH`A-B= &0<=> A=B`]
15409 THEN REPEAT STRIP_TAC
15410 THEN EXISTS_TAC`t1':real`
15411 THEN EXISTS_TAC`t2':real`
15412 THEN EXISTS_TAC`t4':real`
15413 THEN EXISTS_TAC`t3':real`
15414 THEN ASM_REWRITE_TAC[REAL_ARITH`t1+t2+t3+t4=t1+t2+t4+t3:real`;VECTOR_ARITH`t4' % v + t2' % u + t3' % w = t2' % u + t4' % v + t3' % w:real^3`]
15415 THEN ASM_TAC
15416 THEN REAL_ARITH_TAC;
15417 STRIP_TAC
15418 THEN STRIP_TAC
15419 THENL[
15420 EXISTS_TAC`t1:real`
15421 THEN EXISTS_TAC`t3:real`
15422 THEN EXISTS_TAC`t2:real`
15423 THEN EXISTS_TAC`t4:real`
15424 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t2 % u + t3 % v + t4 % w = t3 % v + t2 % u + t4 % w:real^3`;REAL_ARITH`t1 + t3 + t2 + t4=t1 + t2 + t3 + t4`];
15425 EXISTS_TAC`t1:real`
15426 THEN EXISTS_TAC`t2:real`
15427 THEN EXISTS_TAC`t4:real`
15428 THEN EXISTS_TAC`t3:real`
15429 THEN ASM_REWRITE_TAC[REAL_ARITH`t1 + t2 + t4+ t3:real=t1 + t2 + t3 + t4`]
15430 THEN VECTOR_ARITH_TAC]]);;
15431
15432
15433
15434
15435
15436
15437 let condition_edge_in_face_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 u1:real^3 w1:real^3.
15438 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {w,v} IN E /\ {u1,w1} IN E
15439 /\ sigma_fan x V E u w = v
15440 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15441 /\ fan80(x,V,E)
15442 /\ u1=v
15443 /\   aff_gt{x} {v,u,w} = dart_leads_into x V E u1 w1
15444 ==> (u1,w1) IN {(v,u),(u,w),(w,v)}`,
15445
15446
15447 REPEAT STRIP_TAC
15448 THEN POP_ASSUM MP_TAC
15449 THEN POP_ASSUM MP_TAC
15450 THEN DISCH_THEN (LABEL_TAC "EM")
15451 THEN DISCH_THEN (LABEL_TAC "YEU")
15452 THEN SUBGOAL_THEN`u=w1:real^3`ASSUME_TAC
15453 THENL[
15454 MATCH_MP_TAC condition_unique_by_dart_leads_into
15455 THEN EXISTS_TAC `x:real^3`
15456 THEN EXISTS_TAC `V:real^3->bool`
15457 THEN EXISTS_TAC `E:(real^3->bool)->bool`
15458 THEN EXISTS_TAC `v:real^3`
15459 THEN ASM_REWRITE_TAC[]
15460 THEN STRIP_TAC
15461 THENL[ REMOVE_THEN "EM"(fun th-> ASM_REWRITE_TAC[SYM th]);
15462  STRIP_TAC
15463 THENL[
15464
15465 MRESA_TAC PROPERTIES_TRIANGLE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
15466 THEN MRESA_TAC KVQWYDL_lemma1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`; `u:real^3`]
15467 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
15468 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
15469 ` (v:real^3)`]
15470 THEN FIND_ASSUM MP_TAC`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)` 
15471 THEN DISCH_TAC
15472 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `v:real^3` th) THEN FIND_ASSUM MP_TAC `(v:real^3) IN V` THEN DISCH_TAC
15473 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]) THEN STRIP_TAC)
15474 THEN ASM_REWRITE_TAC[w_dart_fan]
15475 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
15476 ` (w:real^3)`]
15477 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
15478 THEN DISCH_TAC
15479 THEN POP_ASSUM (fun th -> MP_TAC th
15480 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
15481 THEN DISCH_TAC
15482 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`] THEN MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
15483 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15484 THEN POP_ASSUM MP_TAC
15485 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
15486 THEN RESA_TAC
15487 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`]
15488 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`] THEN DISCH_TAC THEN MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`] THEN DISCH_TAC THEN ASSUME_TAC th)
15489 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_2_2[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
15490 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
15491 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
15492 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
15493 THEN SET_TAC[];
15494 REMOVE_THEN "YEU" MP_TAC
15495 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC th)
15496 THEN DISCH_TAC 
15497 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15498 THEN ASM_REWRITE_TAC[]
15499 THEN MRESA_TAC PROPERTIES_TRIANGLE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
15500 THEN MRESA_TAC KVQWYDL_lemma1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`; `u:real^3`]
15501 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={C,A,B}`]
15502 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])]];
15503
15504 ASM_REWRITE_TAC[]
15505 THEN SET_TAC[]]);;
15506
15507
15508 let KVQWYDL_lemma3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 u1 w1.
15509 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {w,v} IN E /\ {u1,w1} IN E
15510 /\ sigma_fan x V E u w = v
15511 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15512 /\ fan80(x,V,E)
15513 /\   aff_gt{x} {v,u,w} = dart_leads_into x V E u1 w1
15514 ==> (u1,w1) IN {(v,u),(u,w),(w,v)}`,
15515
15516 REPEAT STRIP_TAC
15517 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,C,A}`] THEN DISCH_TAC
15518 THEN MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={C,A,B}`] THEN DISCH_TAC
15519 THEN ASSUME_TAC th)
15520 THEN MRESA_TAC KVQWYDL_lemma2 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`u1:real^3`;` w1:real^3`]
15521 THEN MRESA_TAC PROPERTIES_TRIANGLE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
15522 THEN MP_TAC(SET_RULE`u1 IN {v, u, w}==> u1=v \/ u1= u \/ u1=w:real^3`)
15523 THEN RESA_TAC
15524 THENL[
15525 MRESA_TAC  condition_edge_in_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`; `u:real^3`;`w:real^3`;`u1:real^3`;`w1:real^3`];
15526 MRESA_TAC  condition_edge_in_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `u:real^3`;`w:real^3`;`v:real^3`;`u1:real^3`;`w1:real^3`]
15527 THEN POP_ASSUM MP_TAC
15528 THEN SET_TAC[];
15529 MRESA_TAC  condition_edge_in_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `w:real^3`;`v:real^3`;`u:real^3`;`u1:real^3`;`w1:real^3`]
15530 THEN POP_ASSUM MP_TAC
15531 THEN SET_TAC[]]);;
15532
15533
15534
15535
15536
15537 let CARD_3=prove(`!e:A->bool.
15538  CARD e=3 /\ FINITE e
15539 ==> ?v u w:A. e={v,u,w} /\ ~(v=u)/\ ~(u=w) /\ ~(w=v)`,
15540 REPEAT GEN_TAC
15541 THEN STRIP_TAC
15542 THEN SUBGOAL_THEN `~((e:A->bool)={})` ASSUME_TAC
15543 THENL[
15544 STRIP_TAC
15545 THEN MP_TAC(ISPEC`(e:A->bool)`CARD_EQ_0)
15546 THEN RESA_TAC
15547 THEN POP_ASSUM MP_TAC 
15548 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
15549                  IN_INSERT; NOT_IN_EMPTY]
15550 THEN ARITH_TAC;
15551
15552 MP_TAC(SET_RULE `~((e:A->bool)={})==> ?v:A. v IN e`)
15553 THEN RESA_TAC
15554 THEN SUBGOAL_THEN`~((e:A->bool) DELETE v={})` ASSUME_TAC
15555 THENL[
15556 STRIP_TAC
15557 THEN MP_TAC(ISPECL[`v:A`;`(e:A->bool)`;]CARD_DELETE)
15558 THEN RESA_TAC
15559 THEN MP_TAC(ISPECL[`(e:A->bool)`;`v:A`] FINITE_DELETE)
15560 THEN RESA_TAC
15561 THEN MP_TAC(ISPEC`(e:A->bool) DELETE v`CARD_EQ_0)
15562 THEN RESA_TAC
15563 THEN POP_ASSUM MP_TAC
15564 THEN ARITH_TAC;
15565 MP_TAC(SET_RULE `~((e:A->bool)DELETE v={})==> ?w:A. w IN (e:A->bool)DELETE v/\ w IN e`)
15566 THEN RESA_TAC
15567 THEN MP_TAC(SET_RULE `(w IN (e:A->bool)DELETE v)==> ~(v=w)`)
15568 THEN RESA_TAC
15569 THEN SUBGOAL_THEN`~((e:A->bool) DELETE v DELETE w ={})` ASSUME_TAC
15570 THENL[
15571 STRIP_TAC
15572 THEN MP_TAC(ISPECL[`v:A`;`(e:A->bool)`;]CARD_DELETE)
15573 THEN RESA_TAC
15574 THEN MP_TAC(ISPECL[`(e:A->bool)`;`v:A`] FINITE_DELETE)
15575 THEN RESA_TAC
15576 THEN MP_TAC(ISPECL[`w:A`;`(e:A->bool) DELETE v`;]CARD_DELETE)
15577 THEN RESA_TAC
15578 THEN MP_TAC(ISPECL[`(e:A->bool) DELETE v`;`w:A`] FINITE_DELETE)
15579 THEN RESA_TAC
15580 THEN MP_TAC(ISPEC`(e:A->bool) DELETE v DELETE w`CARD_EQ_0)
15581 THEN RESA_TAC
15582 THEN POP_ASSUM MP_TAC
15583 THEN ARITH_TAC;
15584 MP_TAC(SET_RULE `~((e:A->bool) DELETE v DELETE w={})==> ?u:A. u IN ((e:A->bool)DELETE v DELETE w)/\ u IN e`)
15585 THEN RESA_TAC
15586 THEN MP_TAC(SET_RULE `(v IN (e:A->bool))/\ (w IN (e:A->bool)) /\ (u IN (e:A->bool))==> {v,w,u} SUBSET e`)
15587 THEN RESA_TAC
15588 THEN MP_TAC(SET_RULE `(u IN (e:A->bool)DELETE v DELETE w)==> ~(u=v)/\ ~(w=u)`)
15589 THEN RESA_TAC
15590 THEN SUBGOAL_THEN(`CARD {v:A,w,u}=3`)ASSUME_TAC
15591 THENL[
15592 SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
15593                  IN_INSERT; NOT_IN_EMPTY]
15594
15595 THEN ASM_REWRITE_TAC[]
15596 THEN ARITH_TAC;
15597
15598
15599 POP_ASSUM MP_TAC
15600 THEN FIND_ASSUM MP_TAC`CARD (e:A->bool)=3`
15601 THEN DISCH_TAC
15602 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
15603 THEN DISCH_TAC
15604 THEN MP_TAC(ISPECL[`{v:A,w,u}`;`e:A->bool`]CARD_SUBSET_EQ)
15605 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
15606 THEN RESA_TAC
15607 THEN EXISTS_TAC`v:A`
15608 THEN EXISTS_TAC`w:A`
15609 THEN EXISTS_TAC`u:A`
15610 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
15611 THEN ASM_TAC
15612 THEN SET_TAC[]]]]]);; 
15613
15614
15615 let FINITE_FACE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15616 FAN(x,V,E)
15617 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15618 ==> FINITE ds `,
15619 REPEAT STRIP_TAC
15620 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15621 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
15622 THEN MRESA_TAC FINITE_SUBSET[`ds:real^3#real^3#real^3#real^3->bool`;`d_fan (x:real^3, V:real^3->bool, (E:(real^3->bool)->bool))`]);;
15623
15624
15625
15626 let condition_f1_fan_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y y1 ds.
15627 FAN(x,V,E) 
15628 /\ y = f1_fan x V E y1 
15629 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
15630 /\ d_fan (x,V,E) =d1_fan (x,V,E)
15631 /\ y1 IN ds
15632 ==> y IN ds`,
15633 REPEAT GEN_TAC THEN STRIP_TAC
15634 THEN POP_ASSUM MP_TAC
15635 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
15636 THEN MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
15637 THEN ASM_REWRITE_TAC[face; orbit_map;IN_ELIM_THM]
15638 THEN STRIP_TAC
15639 THEN POP_ASSUM MP_TAC
15640 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`n:num`;`( \ t. res (t x V E ) (d1_fan (x:real^3, V:real^3->bool, (E:(real^3->bool)->bool))))`]
15641
15642 THEN POP_ASSUM (fun th-> MRESA1_TAC th `x':real^3#real^3#real^3#real^3`)
15643 THEN STRIP_TAC
15644 THEN EXISTS_TAC`SUC n:num`
15645 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`SUC n:num`;`( \ t. res (t x V E ) (d1_fan (x:real^3, V:real^3->bool, (E:(real^3->bool)->bool))))`]
15646 THEN POP_ASSUM (fun th-> MRESA1_TAC th `x':real^3#real^3#real^3#real^3`)
15647 THEN REWRITE_TAC[COM_POWER;o_DEF]
15648 THEN ASM_TAC
15649 THEN ARITH_TAC);;
15650
15651
15652
15653 let CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15654 FAN(x,V,E)
15655 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15656 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15657 ==> 3<= CARD ds`,
15658
15659 REPEAT STRIP_TAC
15660 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
15661 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15662 THEN MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
15663 THEN SUBGOAL_THEN`x' IN ds:real^3#real^3#real^3#real^3->bool` ASSUME_TAC
15664
15665 THENL (*1*)[
15666 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM;]
15667 THEN EXISTS_TAC`0`
15668 THEN REWRITE_TAC[POWER;I_DEF]
15669 THEN ARITH_TAC;(*1*)
15670 ABBREV_TAC`y=f1_fan x V E (x':real^3#real^3#real^3#real^3)`
15671 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3#real^3#real^3#real^3)` ;`(x':real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
15672 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15673 THEN ABBREV_TAC`y1=f1_fan x V E (y:real^3#real^3#real^3#real^3)`
15674 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y1:real^3#real^3#real^3#real^3)` ;`(y:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
15675 THEN MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
15676 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)` 
15677 THEN MP_TAC(SET_RULE`y IN face (hypermap1_of_fanx (x,V,E)) x'/\ face (hypermap1_of_fanx (x,V,E)) x' SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V,E)`) THEN RESA_TAC
15678 THEN MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
15679 THEN DISJ_CASES_TAC(SET_RULE`y1=x' \/ ~(y1=x':real^3#real^3#real^3#real^3)`)
15680 THENL(*2*)[
15681 MP_TAC(SET_RULE`x'=y1:real^3#real^3#real^3#real^3==> pr2 x'= pr2 y1`) 
15682 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15683 THEN REWRITE_TAC[]
15684 THEN STRIP_TAC
15685 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y1:real^3#real^3#real^3#real^3)` ;`(y:real^3#real^3#real^3#real^3)`]
15686 THEN REMOVE_ASSUM_TAC
15687 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3#real^3#real^3#real^3)` ;`(x':real^3#real^3#real^3#real^3)`]
15688 THEN POP_ASSUM MP_TAC
15689 THEN POP_ASSUM MP_TAC
15690 THEN RESA_TAC THEN RESA_TAC
15691 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` pr2 (y1:real^3#real^3#real^3#real^3)`;
15692 ` pr2 (y:real^3#real^3#real^3#real^3)`]
15693 THEN POP_ASSUM MP_TAC
15694 THEN POP_ASSUM MP_TAC
15695 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15696 THEN RESA_TAC THEN RESA_TAC
15697 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge (pr2 (y:real^3#real^3#real^3#real^3)) V E = {pr2 y1} \/ ~(set_of_edge (pr2 (y:real^3#real^3#real^3#real^3)) V E = {pr2 y1})`)
15698 THENL(*3*)[
15699 MRESA_TAC CARD_SING[`(pr2 y1):real^3`; `(set_of_edge (pr2 (y:real^3#real^3#real^3#real^3)) V E):real^3->bool`]
15700 THEN POP_ASSUM MP_TAC
15701 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
15702 THEN FIND_ASSUM (fun th -> MP_TAC(ISPEC `(pr2 (y:real^3#real^3#real^3#real^3))` th))`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)`
15703 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`(pr2 (y:real^3#real^3#real^3#real^3)) IN V`
15704 THEN ARITH_TAC;(*3*)
15705 MRESA_TAC SIGMA_FAN [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` pr2 (y:real^3#real^3#real^3#real^3)`;
15706 ` pr2 (y1:real^3#real^3#real^3#real^3)`]
15707 THEN ASM_TAC THEN SET_TAC[]](*2*);
15708 MP_TAC(SET_RULE`x' IN ds /\ y IN ds /\ y1 IN ds==> {x',y,y1:real^3#real^3#real^3#real^3} SUBSET ds`)
15709 THEN RESA_TAC
15710 THEN SUBGOAL_THEN(`CARD {x',y,y1:real^3#real^3#real^3#real^3}=3`)ASSUME_TAC
15711 THENL(*3*)[SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
15712                  IN_INSERT; NOT_IN_EMPTY]
15713
15714 THEN ASM_REWRITE_TAC[]
15715 THEN ARITH_TAC;
15716
15717   MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15718 THEN MRESA_TAC CARD_SUBSET[`{x',y,y1:real^3#real^3#real^3#real^3}`; `ds:real^3#real^3#real^3#real^3->bool`]
15719 ]]]);;
15720
15721
15722
15723
15724
15725
15726
15727
15728
15729 let CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15730 FAN(x,V,E)
15731 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15732 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15733 /\ CARD ds =3
15734 ==> ?f1 f2 f3. ds={f1,f2,f3}/\ f2=f1_fan x V E f1 /\ f3=f1_fan x V E f2 `,
15735
15736
15737 REPEAT STRIP_TAC
15738 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
15739 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15740 THEN MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
15741 THEN SUBGOAL_THEN`x' IN ds:real^3#real^3#real^3#real^3->bool` ASSUME_TAC
15742
15743 THENL (*1*)[
15744 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM;]
15745 THEN EXISTS_TAC`0`
15746 THEN REWRITE_TAC[POWER;I_DEF]
15747 THEN ARITH_TAC;(*1*)
15748 ABBREV_TAC`y=f1_fan x V E (x':real^3#real^3#real^3#real^3)`
15749 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3#real^3#real^3#real^3)` ;`(x':real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
15750 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15751 THEN ABBREV_TAC`y1=f1_fan x V E (y:real^3#real^3#real^3#real^3)`
15752 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y1:real^3#real^3#real^3#real^3)` ;`(y:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
15753 THEN MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
15754 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)` 
15755 THEN MP_TAC(SET_RULE`y IN face (hypermap1_of_fanx (x,V,E)) x'/\ face (hypermap1_of_fanx (x,V,E)) x' SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V,E)`) THEN RESA_TAC
15756 THEN MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
15757 THEN DISJ_CASES_TAC(SET_RULE`y1=x' \/ ~(y1=x':real^3#real^3#real^3#real^3)`)
15758 THENL(*2*)[
15759 MP_TAC(SET_RULE`x'=y1:real^3#real^3#real^3#real^3==> pr2 x'= pr2 y1`) 
15760 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15761 THEN REWRITE_TAC[]
15762 THEN STRIP_TAC
15763 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y1:real^3#real^3#real^3#real^3)` ;`(y:real^3#real^3#real^3#real^3)`]
15764 THEN REMOVE_ASSUM_TAC
15765 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3#real^3#real^3#real^3)` ;`(x':real^3#real^3#real^3#real^3)`]
15766 THEN POP_ASSUM MP_TAC
15767 THEN POP_ASSUM MP_TAC
15768 THEN RESA_TAC THEN RESA_TAC
15769 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` pr2 (y1:real^3#real^3#real^3#real^3)`;
15770 ` pr2 (y:real^3#real^3#real^3#real^3)`]
15771 THEN POP_ASSUM MP_TAC
15772 THEN POP_ASSUM MP_TAC
15773 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15774 THEN RESA_TAC THEN RESA_TAC
15775 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge (pr2 (y:real^3#real^3#real^3#real^3)) V E = {pr2 y1} \/ ~(set_of_edge (pr2 (y:real^3#real^3#real^3#real^3)) V E = {pr2 y1})`)
15776 THENL(*3*)[
15777 MRESA_TAC CARD_SING[`(pr2 y1):real^3`; `(set_of_edge (pr2 (y:real^3#real^3#real^3#real^3)) V E):real^3->bool`]
15778 THEN POP_ASSUM MP_TAC
15779 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
15780 THEN FIND_ASSUM (fun th -> MP_TAC(ISPEC `(pr2 (y:real^3#real^3#real^3#real^3))` th))`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)`
15781 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`(pr2 (y:real^3#real^3#real^3#real^3)) IN V`
15782 THEN ARITH_TAC;(*3*)
15783 MRESA_TAC SIGMA_FAN [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` pr2 (y:real^3#real^3#real^3#real^3)`;
15784 ` pr2 (y1:real^3#real^3#real^3#real^3)`]
15785 THEN ASM_TAC THEN SET_TAC[]](*2*);
15786 MP_TAC(SET_RULE`x' IN ds /\ y IN ds /\ y1 IN ds==> {x',y,y1:real^3#real^3#real^3#real^3} SUBSET ds`)
15787 THEN RESA_TAC
15788 THEN SUBGOAL_THEN(`CARD {x',y,y1:real^3#real^3#real^3#real^3}=3`)ASSUME_TAC
15789 THENL(*3*)[SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
15790                  IN_INSERT; NOT_IN_EMPTY]
15791
15792 THEN ASM_REWRITE_TAC[]
15793 THEN ARITH_TAC;
15794
15795   MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15796 THEN MRESA_TAC CARD_SUBSET_EQ[`{x',y,y1:real^3#real^3#real^3#real^3}`; `ds:real^3#real^3#real^3#real^3->bool`]
15797 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
15798 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
15799 THEN EXISTS_TAC`y1:real^3#real^3#real^3#real^3`
15800 THEN ASM_REWRITE_TAC[]
15801 ]]]);;
15802
15803
15804
15805
15806
15807 let lemma_CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds f1 f2 f3.
15808 FAN(x,V,E)
15809 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15810 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15811 /\ CARD ds =3
15812 /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ds={f1,f2,f3}
15813 ==> f1=f1_fan x V E f3`,
15814 REPEAT STRIP_TAC
15815 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15816 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15817 THEN MP_TAC(SET_RULE`{f1, f2, f3} SUBSET d1_fan (x,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)`) THEN RESA_TAC
15818 THEN ABBREV_TAC`y1=f1_fan x V E (f3:real^3#real^3#real^3#real^3)`
15819 THEN DISJ_CASES_TAC(SET_RULE`y1=f2 \/ ~(y1=f2:real^3#real^3#real^3#real^3)`)
15820 THENL[
15821 MP_TAC(SET_RULE`f2=y1:real^3#real^3#real^3#real^3==> pr2 f2= pr2 y1`) 
15822 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15823 THEN REWRITE_TAC[]
15824 THEN STRIP_TAC
15825 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y1:real^3#real^3#real^3#real^3)` ;`(f3:real^3#real^3#real^3#real^3)`]
15826 THEN REMOVE_ASSUM_TAC
15827 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f3:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`]
15828 THEN POP_ASSUM MP_TAC
15829 THEN POP_ASSUM MP_TAC
15830 THEN RESA_TAC THEN RESA_TAC
15831 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` pr2 (y1:real^3#real^3#real^3#real^3)`;
15832 ` pr2 (f3:real^3#real^3#real^3#real^3)`]
15833 THEN POP_ASSUM MP_TAC
15834 THEN POP_ASSUM MP_TAC
15835 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15836 THEN RESA_TAC THEN RESA_TAC
15837 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge (pr2 (f3:real^3#real^3#real^3#real^3)) V E = {pr2 y1} \/ ~(set_of_edge (pr2 (f3:real^3#real^3#real^3#real^3)) V E = {pr2 y1})`)
15838 THENL[
15839 MRESA_TAC CARD_SING[`(pr2 y1):real^3`; `(set_of_edge (pr2 (f3:real^3#real^3#real^3#real^3)) V E):real^3->bool`]
15840 THEN POP_ASSUM MP_TAC
15841 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
15842 THEN FIND_ASSUM (fun th -> MP_TAC(ISPEC `(pr2 (f3:real^3#real^3#real^3#real^3))` th))`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)`
15843 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`(pr2 (f3:real^3#real^3#real^3#real^3)) IN V`
15844 THEN ARITH_TAC;
15845
15846 MRESA_TAC SIGMA_FAN [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` pr2 (f3:real^3#real^3#real^3#real^3)`;
15847 ` pr2 (y1:real^3#real^3#real^3#real^3)`]
15848 THEN ASM_TAC THEN SET_TAC[]];
15849 MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
15850 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f3:real^3#real^3#real^3#real^3)`) 
15851 THEN MRESAL_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y1:real^3#real^3#real^3#real^3)` ;`(f3:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`][SET_RULE`A IN {B,C,A}`]
15852 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[]]);;
15853
15854
15855
15856
15857 let CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15858 FAN(x,V,E)
15859 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15860 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15861 /\ CARD ds =3
15862 ==> ?f1 f2 f3. ds={f1,f2,f3}/\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ f1_fan x V E f3 =f1
15863 /\ {pr2 f2, pr2 f3} IN E
15864 /\ {pr2 f3, pr2 f1 } IN E
15865 /\ {pr2 f1, pr2 f2 } IN E
15866 /\ sigma_fan x V E (pr2 f2) (pr2 f3)=pr2 f1
15867 /\ pr2 f3= pr3 f2
15868 /\ pr2 f2= pr3 f1
15869 /\ pr2 f1= pr3 f3`,
15870
15871 REPEAT STRIP_TAC
15872 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15873 THEN POP_ASSUM (fun th->MP_TAC(SYM th))
15874 THEN POP_ASSUM (fun th->MP_TAC(SYM th))
15875 THEN DISCH_TAC THEN DISCH_TAC
15876 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15877 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15878 THEN MP_TAC(SET_RULE`{f1, f2, f3} SUBSET d1_fan (x,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)`) THEN RESA_TAC
15879 THEN MRESA_TAC lemma_CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f1:real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`;`f3:real^3#real^3#real^3#real^3`]
15880 THEN POP_ASSUM (fun th->MP_TAC(SYM th))
15881 THEN DISCH_TAC 
15882 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f2:real^3#real^3#real^3#real^3)` ;`(f1:real^3#real^3#real^3#real^3)`]
15883 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f3:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`]
15884 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
15885 THEN EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
15886 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
15887 THEN ASM_REWRITE_TAC[]
15888 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
15889 THEN POP_ASSUM MP_TAC 
15890 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
15891 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
15892 THEN POP_ASSUM MP_TAC 
15893 THEN POP_ASSUM MP_TAC 
15894 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
15895 THEN REPEAT STRIP_TAC
15896 THEN ASM_REWRITE_TAC[]
15897 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f1:real^3#real^3#real^3#real^3)` ;`(f3:real^3#real^3#real^3#real^3)`]
15898 THEN REMOVE_ASSUM_TAC
15899 THEN REMOVE_ASSUM_TAC
15900 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
15901 THEN ASM_REWRITE_TAC[]);;
15902
15903
15904
15905
15906 let KVQWYDL_lemma10=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15907 FAN(x,V,E)
15908 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15909 /\ fan80(x,V,E)
15910 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15911 /\ CARD ds=3
15912 ==>  aff_gt {x} ({pr2(y)| y IN ds}) = dartset_leads_into_fan x V E ds`,
15913
15914 REPEAT STRIP_TAC
15915 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15916 THEN REWRITE_TAC[SET_RULE`{pr2 y | y IN {f1, f2, f3}}= {pr2 f1, pr2 f2, pr2 f3}`]
15917 THEN MRESA_TAC KVQWYDL_lemma1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`; `(pr2 f2):real^3`;`pr2 f3:real^3`]
15918 THEN MRESAL_TAC UNIQUE_DARTSET_LEADS_INTO1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`aff_gt {x} {pr2 f1, pr2 f2, pr2 f3}:real^3->bool`;`f2:real^3#real^3#real^3#real^3`][SET_RULE`A IN {B,A,C}`]);;
15919
15920
15921
15922 let IN_D1_FAN_IMP_EDGE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y.
15923 FAN(x,V,E)
15924 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15925 /\ y IN d_fan(x,V,E) 
15926 ==> {pr2 y, pr3 y} IN E`,
15927 REPEAT STRIP_TAC
15928 THEN POP_ASSUM MP_TAC
15929 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15930 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
15931 THEN STRIP_TAC
15932 THEN ASM_REWRITE_TAC[pr2;pr3]);;
15933
15934
15935 let EQ_PAIR_IMP_EQ_4_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y y1.
15936 FAN(x,V,E)
15937 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15938 /\ y IN d_fan(x,V,E) 
15939 /\ y1 IN d_fan(x,V,E) 
15940 /\ (pr2 y,pr3 y)= (pr2 y1,pr3 y1)
15941 ==> y=y1`,
15942
15943 REPEAT STRIP_TAC
15944 THEN POP_ASSUM MP_TAC
15945 THEN POP_ASSUM MP_TAC
15946 THEN POP_ASSUM MP_TAC
15947 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15948 THEN REWRITE_TAC[PAIR_EQ;IN_ELIM_THM;d1_fan]
15949 THEN STRIP_TAC
15950 THEN STRIP_TAC
15951 THEN ASM_REWRITE_TAC[pr2; pr3]
15952 THEN STRIP_TAC
15953 THEN ASM_REWRITE_TAC[]);;
15954
15955 let KVQWYDL_lemma30=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15956 FAN(x,V,E)
15957 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15958 /\ fan80(x,V,E)
15959 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15960 /\ CARD ds=3
15961
15962 ==>  (!y. y IN d_fan(x,V,E) /\ dartset_leads_into_fan x V E ds = dart_leads_into x V E (pr2 y) (pr3 y) 
15963 ==> y IN ds)`,
15964
15965
15966 REPEAT STRIP_TAC
15967 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15968 THEN MRESA_TAC IN_D1_FAN_IMP_EDGE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3`]
15969 THEN MRESA_TAC KVQWYDL_lemma1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`; `(pr2 f2):real^3`;`pr2 f3:real^3`]
15970 THEN MRESAL_TAC UNIQUE_DARTSET_LEADS_INTO1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`aff_gt {x} {pr2 f1, pr2 f2, pr2 f3}:real^3->bool`;`f2:real^3#real^3#real^3#real^3`][SET_RULE`A IN {B,A,C}`]
15971 THEN MRESA_TAC KVQWYDL_lemma3[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`; `(pr2 f2):real^3`;`pr2 f3:real^3`; `(pr2 y):real^3`;`pr3 y:real^3`]
15972 THEN MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15973 THEN MP_TAC(SET_RULE`{f1, f2, f3} SUBSET d_fan (x,V,E)==> f1 IN d_fan (x,V,E) /\ f2 IN d_fan (x,V,E) /\ f3 IN d_fan (x,V,E)`) THEN RESA_TAC
15974 THEN MP_TAC(SET_RULE`pr2 y,pr3 y IN {(pr2 f1,pr2 f2), (pr2 f2,pr3 f2), (pr3 f2,pr2 f1)}==>
15975 (pr2 y,pr3 y) =(pr2 f1,pr2 f2)\/ (pr2 y,pr3 y) = (pr2 f2,pr3 f2)\/ (pr2 y,pr3 y) =(pr3 f2,pr2 f1)`)
15976 THEN RESA_TAC
15977 THENL[
15978 MRESA_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3`;`f1:real^3#real^3#real^3#real^3`]
15979 THEN SET_TAC[];
15980 MRESA_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`]
15981 THEN SET_TAC[];
15982 MRESA_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3`;`f3:real^3#real^3#real^3#real^3`]
15983 THEN SET_TAC[]]);;
15984
15985
15986 let KVQWYDL=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15987 FAN(x,V,E)
15988 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
15989 /\ fan80(x,V,E)
15990 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15991 /\ CARD ds=3
15992
15993 ==>   aff_gt {x} ({pr2(y)| y IN ds}) = dartset_leads_into_fan x V E ds
15994 /\  (!y. y IN d_fan(x,V,E) /\ dartset_leads_into_fan x V E ds = dart_leads_into x V E (pr2 y) (pr3 y) 
15995 ==> y IN ds)`,
15996 MESON_TAC[KVQWYDL_lemma30;KVQWYDL_lemma10]);;
15997
15998
15999
16000 (**************MOZNWEH*******************)
16001
16002
16003 let dartset_leads_into_fan_radial=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds r.
16004 FAN(x,V,E)
16005 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
16006 /\ fan80(x,V,E)
16007 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
16008 /\ CARD ds=3
16009 /\ r> &0
16010 ==>   radial_norm r x ((dartset_leads_into_fan x V E ds) INTER normball  x r) `,
16011
16012 REPEAT STRIP_TAC
16013 THEN MRESA_TAC KVQWYDL_lemma10[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
16014 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
16015 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
16016 THEN REWRITE_TAC[SET_RULE`{pr2 y | y IN {f1, f2, f3}}={pr2 f1,pr2 f2,pr2 f3}`]
16017 THEN MATCH_MP_TAC aff_gt_radial
16018 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f2):real^3`;`(pr2 f1):real^3`]
16019 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f3):real^3`;`(pr2 f2):real^3`]
16020 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f1):real^3`;`(pr2 f3):real^3`]
16021 THEN ASM_TAC THEN SET_TAC[]);;
16022
16023
16024 let ball_eq_normball=prove(`!x r.ball (x,r)= normball x r`,
16025 REPEAT STRIP_TAC
16026 THEN REWRITE_TAC[ball; normball;DIST_SYM]);;
16027
16028
16029 let dartset_leads_into_fan_eventually_radial_norm=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
16030 FAN(x,V,E)
16031 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
16032 /\ fan80(x,V,E)
16033 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
16034 /\ CARD ds=3
16035 ==>   eventually_radial_norm  x ((dartset_leads_into_fan x V E ds)) `,
16036
16037 REPEAT STRIP_TAC
16038 THEN MRESAL_TAC dartset_leads_into_fan_radial[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`&1`][eventually_radial_norm;REAL_ARITH`&1> &0`]
16039 THEN EXISTS_TAC`&1`
16040 THEN ASM_REWRITE_TAC[REAL_ARITH`&1> &0`]);;
16041
16042
16043
16044 let measurable_dartset_leads_into3_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds e:real.
16045 FAN(x,V,E)
16046 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
16047 /\ fan80(x,V,E)
16048 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
16049 /\ CARD ds=3
16050 /\ e> &0
16051 ==>   measurable((dartset_leads_into_fan x V E ds) INTER ball (x,e))`,
16052 REPEAT STRIP_TAC
16053 THEN MRESA_TAC KVQWYDL_lemma10[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
16054 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
16055 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B=B INTER A`]
16056 THEN MESON_TAC[MEASURABLE_BALL_AFF_GT]);;
16057
16058
16059
16060
16061 let CARD_GT1_IMP_AZIM_FAN_EQ_AZIM=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y.
16062 FAN(x,V,E)
16063 /\ y IN d_fan(x,V,E)
16064 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
16065 ==>    
16066 azim_fan x V E (pr2 y) (pr3 y)= azim x (pr2 y) (pr3 y) (sigma_fan x V E (pr2 y) (pr3 y))`,
16067 REPEAT STRIP_TAC
16068 THEN REWRITE_TAC[azim_fan]
16069 THEN POP_ASSUM MP_TAC
16070 THEN DISCH_THEN(LABEL_TAC "EM")
16071 THEN MRESA_TAC IN_D1_FAN_IMP_EDGE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3`]
16072 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr3 y):real^3`;`(pr2 y):real^3`]
16073 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `pr2 (y:real^3#real^3#real^3#real^3)`));;
16074
16075
16076 let CARD_GT1_IMP_AZIM_FAN_EQ_DIHV=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y.
16077 FAN(x,V,E)
16078 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
16079 /\ fan80(x,V,E)
16080 /\ y IN d_fan(x,V,E)
16081 ==>    
16082 azim_fan x V E (pr2 y) (pr3 y)= dihV x (pr2 y) (pr3 y) (sigma_fan x V E (pr2 y) (pr3 y))`,
16083
16084 REPEAT STRIP_TAC
16085 THEN MRESA_TAC CARD_GT1_IMP_AZIM_FAN_EQ_AZIM[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real
16086 ^3#real^3`]
16087 THEN MRESA_TAC IN_D1_FAN_IMP_EDGE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3`]
16088 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr3 y):real^3`;`(pr2 y):real^3`]
16089
16090 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` (pr2 y):real^3`;`(pr3 y):real^3`]
16091 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E (pr2 y) (pr3 y)):real^3`;`(pr2 y):real^3`]
16092 THEN POP_ASSUM MP_TAC
16093 THEN RESA_TAC
16094 THEN FIND_ASSUM MP_TAC`fan80(x:real^3,V,E)`
16095 THEN REWRITE_TAC[fan80]
16096 THEN DISCH_TAC
16097 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(pr2 y):real^3`;`(pr3 y):real^3`])
16098 THEN MRESA_TAC AZIM_DIVH[`x:real^3`;`(pr2 y):real^3`;`(pr3 y):real^3`; `(sigma_fan x V E (pr2 y) (pr3 y)):real^3`]);;
16099
16100
16101
16102
16103
16104
16105
16106
16107
16108
16109
16110
16111
16112
16113 let solid_of_dartset_leads_into_fan_triangle_fan=prove( `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
16114         FAN(x,V,E)
16115 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
16116 /\ fan80(x,V,E)
16117 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
16118 /\ CARD ds=3
16119 ==>    
16120 sol  x (dartset_leads_into_fan x V E ds)= &2 * pi + sum (ds) (\y. (azim_fan x V E (pr2 y) (pr3 y))  - pi)
16121 `,
16122
16123 REPEAT STRIP_TAC
16124 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
16125 THEN POP_ASSUM MP_TAC
16126 THEN POP_ASSUM MP_TAC
16127 THEN POP_ASSUM MP_TAC
16128 THEN POP_ASSUM MP_TAC
16129 THEN DISCH_THEN(LABEL_TAC"MAS")
16130 THEN REPEAT STRIP_TAC
16131 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
16132 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
16133 THEN MP_TAC(SET_RULE`{f1, f2, f3} SUBSET d1_fan (x,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)`) THEN RESA_TAC
16134 THEN MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
16135 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f3:real^3#real^3#real^3#real^3)` THEN MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)` THEN MRESA1_TAC th`(f1:real^3#real^3#real^3#real^3)`) 
16136 THEN MP_TAC(SET_RULE`~(f1 = f3) /\ ~(f3 = f2) /\ ~(f2 = f1)==> DISJOINT {f1:real^3#real^3#real^3#real^3} {f2, f3} /\ DISJOINT {f2:real^3#real^3#real^3#real^3} { f3}`)
16137 THEN RESA_TAC
16138 THEN MRESAL_TAC SUM_UNION[`(\y. azim_fan x V E (pr2 (y:real^3#real^3#real^3#real^3)) (pr3 y) - pi)`;`{(f1:real^3#real^3#real^3#real^3)}`;`{(f2:real^3#real^3#real^3#real^3),(f3:real^3#real^3#real^3#real^3)}`;][SUM_SING]
16139 THEN POP_ASSUM MP_TAC
16140 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
16141                  IN_INSERT; NOT_IN_EMPTY]
16142
16143 THEN MRESAL_TAC SUM_UNION[`(\y. azim_fan x V E (pr2 (y:real^3#real^3#real^3#real^3)) (pr3 y) - pi)`;`{(f2:real^3#real^3#real^3#real^3)}`;`{(f3:real^3#real^3#real^3#real^3)}`;][SUM_SING]
16144 THEN POP_ASSUM MP_TAC
16145 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
16146                  IN_INSERT; NOT_IN_EMPTY]
16147 THEN REWRITE_TAC[SET_RULE`{f2} UNION {f3}={f2,f3}`;SET_RULE`{f1} UNION {f2,f3}={f1,f2,f3}`]
16148 THEN RESA_TAC THEN RESA_TAC
16149 THEN MRESAL_TAC measurable_dartset_leads_into3_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`&1`][REAL_ARITH`&1> &0`]
16150 THEN MRESAL_TAC dartset_leads_into_fan_radial[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`&1`][REAL_ARITH`&1> &0`]
16151 THEN POP_ASSUM MP_TAC
16152 THEN POP_ASSUM MP_TAC
16153 THEN REWRITE_TAC[ball_eq_normball]
16154 THEN MRESA_TAC KVQWYDL_lemma1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`; `(pr2 f2):real^3`;`pr2 f3:real^3`]
16155
16156 THEN MRESAL_TAC UNIQUE_DARTSET_LEADS_INTO1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`aff_gt {x} {pr2 f1, pr2 f2, pr2 f3}:real^3->bool`;`f2:real^3#real^3#real^3#real^3`][SET_RULE`A IN {B,A,C}`]
16157 THEN REMOVE_ASSUM_TAC
16158 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
16159 THEN MRESA_TAC CARD_GT1_IMP_AZIM_FAN_EQ_DIHV[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f1:real^3#real^3#real^3#real^3`]
16160 THEN MRESA_TAC CARD_GT1_IMP_AZIM_FAN_EQ_DIHV[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f2:real^3#real^3#real^3#real^3`]
16161 THEN MRESA_TAC CARD_GT1_IMP_AZIM_FAN_EQ_DIHV[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f3:real^3#real^3#real^3#real^3`]
16162 THEN REPEAT STRIP_TAC
16163 THEN MRESAL_TAC sol[`x:real^3`;`aff_gt {x} {pr3 f3, pr3 f1, pr3 f2}`;`&1`][REAL_ARITH`&1> &0`;REAL_ARITH`A/ &1 pow 3=A`]
16164 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B=B INTER A`]
16165 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
16166 THEN DISCH_TAC
16167 THEN POP_ASSUM (fun th -> MP_TAC th
16168 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
16169 THEN DISCH_TAC
16170 THEN POP_ASSUM (fun th -> MRESA_TAC th [`(pr2 f2):real^3`;`pr2 f3:real^3`]) 
16171 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`; `(pr2 f2):real^3`;`pr2 f3:real^3`]
16172 THEN MRESAL_TAC VOLUME_SOLID_TRIANGLE[`&1`;`x:real^3`;`(pr2 f1):real^3`; `(pr2 f2):real^3`;`pr2 f3:real^3`][REAL_ARITH`&0 < &1`;ball_eq_normball]
16173 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
16174 THEN MRESA_TAC PROPERTIES_TRIANGLE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`; `(pr2 f2):real^3`;`pr2 f3:real^3`]
16175 THEN REMOVE_THEN "MAS" MP_TAC
16176 THEN RESA_TAC
16177 THEN REAL_ARITH_TAC);;
16178
16179
16180
16181
16182
16183
16184
16185
16186 let MOZNWEH=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds e.
16187         FAN(x,V,E)
16188 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
16189 /\ fan80(x,V,E)
16190 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
16191 /\ CARD ds=3
16192 /\ e> &0
16193 ==>    measurable((dartset_leads_into_fan x V E ds) INTER ball (x,e))
16194 /\ eventually_radial_norm  x ((dartset_leads_into_fan x V E ds))
16195 /\ sol  x (dartset_leads_into_fan x V E ds)= &2 * pi + sum (ds) (\y. (azim_fan x V E (pr2 y) (pr3 y))  - pi)
16196 `,
16197
16198 MESON_TAC[solid_of_dartset_leads_into_fan_triangle_fan;measurable_dartset_leads_into3_fan;dartset_leads_into_fan_eventually_radial_norm]);;
16199
16200 (* open Planarity;; 
16201
16202
16203 *)
16204
16205
16206 end;;