2 (* ========================================================================== *)
3 (* FLYSPECK - BOOK FORMALIZATION *)
6 (* Author: Hoang Le Truong *)
8 (* ========================================================================== *)
13 module Leads_intos = struct
19 open Hypermap_of_fan;;
23 open Hypermap_of_fan;;
31 open Fully_surrounded;;
32 open Sin_azim_cross_dot;;
36 (* ========================================================================== *)
38 (* ========================================================================== *)
41 let origin_point_not1_in_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3).
42 FAN(x,V,E) /\ {v,u} IN E
44 ~(x IN convex hull{v,u})`,
47 THEN ASM_REWRITE_TAC[]
48 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
49 ` (v:real^3)`] remark1_fan)
51 THEN FIND_ASSUM MP_TAC`~(u IN aff {x,v:real^3})`
52 THEN MATCH_MP_TAC MONO_NOT
53 THEN REWRITE_TAC[CONVEX_HULL_2; IN_ELIM_THM;]
57 THEN DISJ_CASES_TAC(REAL_ARITH`(v':real= &0) \/ ~(v':real= &0)`)
58 THENL[ASM_REWRITE_TAC[]
61 THEN ASM_REWRITE_TAC[]
62 THEN REDUCE_VECTOR_TAC
66 THEN REPEAT REMOVE_ASSUM_TAC
67 THEN REWRITE_TAC[VECTOR_ARITH`A=B+C<=>C= A-B:real^3`;REAL_ARITH`a+b= &1<=> a= &1 -b:real`]
69 THEN MP_TAC(SET_RULE`v'% u =x- u' % v ==> (inv (v')) % v' % u = (inv (v')) % (x-u' % v:real^3)`)
70 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
71 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`(A%(B-(&1-U)%C)=(A%B)+(A*U-A)%C:real^3)`])
72 THEN MP_TAC(ISPEC`(v':real)`REAL_MUL_LINV)
74 THEN REDUCE_VECTOR_TAC
75 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
77 THEN EXISTS_TAC`inv(v':real)`
78 THEN EXISTS_TAC`&1-inv(v':real)`
79 THEN ASM_REWRITE_TAC[]
80 THEN REAL_ARITH_TAC]);;
87 let origin_point_not_in_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3).
88 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w})
90 ~(x IN convex hull{v,u,w})`,
94 THEN ASM_REWRITE_TAC[]
95 THEN MATCH_MP_TAC MONO_NOT
96 THEN REWRITE_TAC[CONVEX_HULL_3; IN_ELIM_THM; coplanar]
98 THEN EXISTS_TAC`v:real^3`
99 THEN EXISTS_TAC`u:real^3`
100 THEN EXISTS_TAC`w:real^3`
101 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
103 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
104 THEN EXISTS_TAC`u':real`
105 THEN EXISTS_TAC`v':real`
106 THEN EXISTS_TAC`w':real`
107 THEN ASM_MESON_TAC[];
109 SUBGOAL_THEN`(v:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
111 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
115 THEN REDUCE_ARITH_TAC
116 THEN VECTOR_ARITH_TAC;
118 SUBGOAL_THEN`(u:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
120 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
124 THEN REDUCE_ARITH_TAC
125 THEN VECTOR_ARITH_TAC;
126 SUBGOAL_THEN`(w:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
128 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
132 THEN REDUCE_ARITH_TAC
133 THEN VECTOR_ARITH_TAC;
135 THEN SET_TAC[]]]]]);;
137 let separate_point_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3).
138 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w})
140 ?(h:real). &0< h /\ (!(y:real^3). y IN convex hull{v,u,w} ==> h < norm(y-x))`,
143 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3),(w:real^3)}` ASSUME_TAC
145 MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
146 ` (v:real^3)`] remark1_fan)
148 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
149 `(u:real^3)`] remark1_fan)
151 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
152 ` (w:real^3)`] remark1_fan)
154 THEN POP_ASSUM MP_TAC
155 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
156 THEN ASM_REWRITE_TAC[]
158 THEN MP_TAC(SET_RULE`(v:real^3) IN (V:real^3->bool) /\ (u:real^3) IN (V:real^3->bool) /\ (w:real^3) IN (V:real^3->bool)==> {v,u,w} SUBSET V`)
159 THEN ASM_REWRITE_TAC[]
161 THEN MATCH_MP_TAC(ISPECL[`{(v:real^3),(u:real^3),(w:real^3)}`;`V:real^3->bool`]FINITE_SUBSET)
162 THEN ASM_REWRITE_TAC[]
164 THEN REWRITE_TAC[FAN;fan1]
167 MP_TAC(ISPEC`{(v:real^3),(u:real^3),(w:real^3)}`FINITE_IMP_COMPACT_CONVEX_HULL)
168 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;COMPACT_EQ_BOUNDED_CLOSED])
170 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
172 THEN MP_TAC(ISPECL[`convex hull {(v:real^3),(u:real^3),(w:real^3)}`;`x:real^3`]SEPARATE_POINT_CLOSED)
174 THEN EXISTS_TAC`d:real/ &2`
177 ASM_TAC THEN REAL_ARITH_TAC;
179 ONCE_REWRITE_TAC[NORM_SUB]
181 THEN POP_ASSUM (fun th ->MP_TAC(ISPEC`y:real^3`th))
182 THEN REWRITE_TAC[dist;]
183 THEN DISCH_THEN(LABEL_TAC"A")
185 THEN REMOVE_THEN "A" MP_TAC
186 THEN POP_ASSUM (fun th ->REWRITE_TAC[th])
187 THEN POP_ASSUM MP_TAC
188 THEN REAL_ARITH_TAC]]);;
192 let bounded_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3).
193 FAN(x,V,E) /\ {v,u} IN E
194 ==> ?(h:real). &0< h /\ (!(y:real^3). y IN convex hull{v,u} ==> norm(y-x)<h )`,
196 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3)}` ASSUME_TAC
197 THENL(*1*)[SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
198 IN_INSERT; NOT_IN_EMPTY];
200 MP_TAC(ISPEC`{(v:real^3),(u:real^3)}`FINITE_IMP_COMPACT_CONVEX_HULL)
201 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;])
203 THEN ASSUME_TAC(ISPEC`x:real^3` norm_origin_fan )
204 THEN ASSUME_TAC(SET_RULE`convex hull {(v:real^3), u} SUBSET (:real^3)`)
205 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`(:real^3)`;`convex hull {(v:real^3),(u:real^3)}`]CONTINUOUS_ON_SUBSET)
207 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`convex hull {(v:real^3),(u:real^3)}`]COMPACT_CONTINUOUS_IMAGE)
209 THEN POP_ASSUM MP_TAC
210 THEN REWRITE_TAC[COMPACT_EQ_BOUNDED_CLOSED;bounded;IMAGE;IN_ELIM_THM]
211 THEN ONCE_REWRITE_TAC[TAUT`A/\B<=>B/\A`;]
213 THEN POP_ASSUM MP_TAC
214 THEN DISCH_THEN(LABEL_TAC"A")
215 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u} /\
216 lift (norm (v - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
219 THEN SIMP_TAC[CONVEX_HULL_2; IN_ELIM_THM;]
222 THEN REDUCE_VECTOR_TAC
225 SUBGOAL_THEN `&0< (a:real)` ASSUME_TAC
227 REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`lift (norm (v - (x:real^3)))`th))
229 THEN POP_ASSUM MP_TAC
230 THEN REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
231 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
232 ` (v:real^3)`] remark1_fan)
234 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
236 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
237 THEN MP_TAC(REAL_ARITH`~(&0 =norm(v-x:real^3)) /\ &0 <= norm(v-x:real^3)==> &0 <norm(v-x:real^3)`)
239 THEN POP_ASSUM MP_TAC
242 EXISTS_TAC`&2 * a:real`
247 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u} /\
248 lift (norm (y - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
253 REMOVE_THEN "A"(fun th-> MP_TAC(ISPEC`lift (norm (y - x:real^3))`th))
254 THEN ASM_REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
256 THEN REAL_ARITH_TAC];
259 THEN REAL_ARITH_TAC]]]]);;
263 (* ========================================================================== *)
265 (* ========================================================================== *)
268 let exists_open_not_collinear=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
269 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
271 ?t1:real. &0 < t1 /\ t1 <= &1
272 /\ (!t:real. &0<= t /\ t<= t1==> ~(collinear{x,v,(&1-t)%u+ t % w}))`,
275 THEN REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
276 THEN ONCE_REWRITE_TAC[COLLINEAR_3;]
277 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
278 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;
279 `(E:(real^3->bool)->bool)`;` w:real^3`;` u:real^3`]
280 THEN FIND_ASSUM MP_TAC`~collinear {(x:real^3),(u:real^3),(w:real^3)}`
281 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={B,C,A}`;]
282 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[collinear_fan]
283 THEN ASM_REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
284 THEN DISCH_THEN(LABEL_TAC"MA")
285 THEN FIND_ASSUM MP_TAC`~((u:real^3) IN aff {(x:real^3), (v:real^3)})`
286 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
287 THEN DISCH_THEN(LABEL_TAC"A")
288 THEN SUBGOAL_THEN`!(t:real). ~((&1 - t) % u + t % w = x:real^3)`ASSUME_TAC
291 THEN REMOVE_THEN "MA" MP_TAC
292 THEN MATCH_MP_TAC MONO_NOT
294 THEN EXISTS_TAC`&1-(t:real)`
295 THEN EXISTS_TAC`(t:real)`
296 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - t + t = &1`];(*1*)
299 SUBGOAL_THEN`!(t:real). (collinear {vec 0, v - x, ((&1 - t) % u + t % w) - x} <=>
300 vector_angle (v - x:real^3) (((&1 - t) % u + t % w) - x) = &0 \/
301 vector_angle (v - x) (((&1 - t) % u + t % w) - x) = pi)`ASSUME_TAC
305 THEN MP_TAC(ISPECL[`(v:real^3)-(x:real^3)`;`((&1 - t) % (u:real^3) + (t:real) % (w:real^3)) - (x:real^3)`]
306 COLLINEAR_VECTOR_ANGLE)
307 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B=vec 0<=> A=B`];(*2*)
310 THEN MRESA_TAC open_vector_angle_fan[ `x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`c:real`;`&0`]
311 THEN MRESA_TAC open_vector_angle_fan[ `x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`c:real`;`pi`]
312 THEN REWRITE_TAC[DE_MORGAN_THM;]
313 THEN MP_TAC(ISPECL[`{(t:real^1) | ~(
314 vector_angle ((v:real^3) - x) (((&1 - drop(t)) % (u:real^3) + drop(t) % (w:real^3)) - x) = &0)}`
315 ;`{(t:real^1) | ~(vector_angle (v - x) (((&1 - drop (t)) % u + drop (t) % w) - (x:real^3)) = pi)}`]OPEN_INTER)
316 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM]
319 ((vec 0):real^1) IN {(t:real^1) | ~(
320 vector_angle ((v:real^3) - x) (((&1 - drop(t)) % (u:real^3) + drop(t) % (w:real^3)) - x) = &0 )/\
321 ~(vector_angle (v - x) (((&1 - drop (t)) % u + drop (t) % w) - (x:real^3)) = pi)}` ASSUME_TAC
324 SIMP_TAC[IN_ELIM_THM;drop;VEC_COMPONENT;GSYM(DE_MORGAN_THM)]
325 THEN REDUCE_ARITH_TAC
326 THEN REDUCE_VECTOR_TAC
327 THEN MP_TAC(ISPECL[`((v:real^3)-(x:real^3))`;`((u:real^3)-(x:real^3))`]COLLINEAR_VECTOR_ANGLE)
328 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B=vec 0<=> A=B:real^3`]
329 THEN ONCE_REWRITE_TAC[GSYM(COLLINEAR_3);]
330 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
331 THEN ASM_REWRITE_TAC[];(*3*)
335 THEN POP_ASSUM MP_TAC
336 THEN DISCH_THEN(LABEL_TAC"G")
338 THEN REMOVE_THEN "G" MP_TAC
339 THEN REWRITE_TAC[open_def]
341 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`(vec 0):real^1`th))
342 THEN ASM_REWRITE_TAC[IN_ELIM_THM;dist; VECTOR_ARITH`A-vec 0=A`]
344 THEN EXISTS_TAC`min ((e:real)/ &2) (&1)`
347 POP_ASSUM (fun th->REWRITE_TAC[])
348 THEN POP_ASSUM MP_TAC
349 THEN REAL_ARITH_TAC;(*4*)
355 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`lift(t:real)`th))
356 THEN REWRITE_TAC[LIFT_DROP;NORM_LIFT]
357 THEN DISCH_THEN(LABEL_TAC"G")
359 THEN REMOVE_THEN "G" MATCH_MP_TAC
360 THEN POP_ASSUM MP_TAC
361 THEN POP_ASSUM MP_TAC
362 THEN POP_ASSUM MP_TAC
363 THEN REAL_ARITH_TAC]]]]]);;
369 let exist_close_fan=prove(`(!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3) (v1:real^3) (w1:real^3).
371 FAN(x,V,E) /\ {v,w} INTER {v1,w1}={} /\ {v1,w1} IN E /\ {v,w} IN E
376 (!y1:real^3 y2:real^3. y1 IN (aff_ge {x} {v, w} INTER ballnorm_fan x) /\ y2 IN (aff_ge {x} {v1, w1} INTER ballnorm_fan x)
377 ==> h <= dist(y1,y2) ))`,
380 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
382 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
384 THEN MATCH_MP_TAC( ISPECL [`aff_ge {(x:real^3)} {(v:real^3), (w:real^3)} INTER ballnorm_fan x`;
385 `aff_ge {(x:real^3)} {(v1:real^3), (w1:real^3)} INTER ballnorm_fan x`] SEPARATE_CLOSED_COMPACT)
386 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v:real^3)`;` (w:real^3)`]closed_aff_ge_ballnorm_fan)
388 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v1:real^3)`;` (w1:real^3)`]compact_aff_ge_ballnorm_fan) THEN RESA_TAC
389 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
390 THEN REWRITE_TAC[FAN;fan7]
392 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(v:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
393 THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
394 THEN ASM_REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL; SET_RULE`(A INTER C) INTER (B INTER C)= (A INTER B) INTER C`;]
395 THEN ASSUME_TAC(AFFINE_SING)
396 THEN MP_TAC(ISPEC`{ (x:real^3) }` AFFINE_HULL_EQ )
399 THEN REWRITE_TAC[ballnorm_fan;INTER; IN_SING; EXTENSION;EMPTY;IN_ELIM_THM;]
402 THEN POP_ASSUM MP_TAC
403 THEN ASM_REWRITE_TAC[DIST_REFL ]
404 THEN REAL_ARITH_TAC);;
410 let inequality1_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real.
411 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
413 ?(h:real). &0 <h /\ h<= &1
414 /\ (!t:real. &0 <= t /\ t<h
415 ==> (!(s:real). &0 <= s /\ s <= &1
416 ==> s * inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))* norm(u-((&1-t)%u+ t%w))< d ))`,
418 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
419 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
421 THEN POP_ASSUM MP_TAC
422 THEN DISCH_THEN (LABEL_TAC"A")
423 THEN EXISTS_TAC`min ((h:real)*(d:real) *inv(norm(u-w:real^3))) (&1)`
424 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
425 ` (u:real^3)`] remark1_fan)
427 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_gl_zero_fan)
429 THEN MP_TAC(ISPECL[`(h:real)*(d:real)`;`inv(norm(u-w:real^3))`] REAL_LT_MUL)
433 MP_TAC(ISPECL[`h:real`;`d:real`] REAL_LT_MUL)
442 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
444 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
446 THEN MP_TAC(REAL_ARITH`(t:real)< min ((h:real) * (d:real) * inv (norm (u - w:real^3))) (&1)/\ min (h * d * inv (norm (u - w))) (&1)<= &1 ==>t<= &1/\ (t:real)< (h * d * inv (norm (u - w:real^3)))`)
447 THEN ASM_REWRITE_TAC[REAL_ARITH`min (h * d * inv (norm (u - w))) (&1)<= &1`]
449 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
451 THEN REMOVE_THEN "A"(fun th -> MP_TAC(ISPEC`(&1-s)%v+s%((&1-t)%u+ t%w):real^3`th))
453 THEN MP_TAC(ISPECL[`h:real`;`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`]REAL_LT_INV2)
455 THEN MP_TAC(REAL_ARITH`&0 <h /\ (h:real)< norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)==> &0 <= norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`)
457 THEN MP_TAC(ISPEC`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`REAL_LE_INV)
459 THEN MP_TAC(ISPEC`t:real`REAL_ABS_REFL)
461 THEN MP_TAC(ISPECL[`inv(norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;
462 `inv(h:real)`;`t:real`;`(h * d * inv (norm (u - w:real^3)))`;
465 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
467 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
469 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
470 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
472 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)) * (t:real)`;`inv (h:real) * h * d * inv (norm (u - w:real^3))`;`norm (u - w:real^3)`]REAL_LT_RMUL)
473 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B*C*D)*E=(A*B)*C*(D*E)`]
474 THEN REDUCE_ARITH_TAC
476 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;`(t:real)`;] REAL_LE_MUL)
478 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t:real)`;`norm(u-w:real^3)`] REAL_LE_MUL)
480 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1) \/ ~((s:real)= &1)`)
482 POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
483 THEN REDUCE_ARITH_TAC
484 THEN ASM_REWRITE_TAC[REAL_ARITH`A*B*C=(A*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`];
485 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
487 THEN MP_TAC(ISPECL[`s:real`;`&1`;`(inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t:real)) * norm(u-w:real^3)`;
488 `d:real`]REAL_LT_MUL2)
489 THEN REDUCE_ARITH_TAC
491 THEN ASM_REWRITE_TAC[REAL_ARITH`A*d*B*C=A*(d*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`]]]]);;
497 let inequaility2_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real.
498 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
500 ?(h:real). &0 <h /\ h<= &1
501 /\ (!t:real. &0 <= t /\ t<h
502 ==> (!(s:real). &0 <= s /\ s <= &1
503 ==> (norm(inv(norm((&1-s)%v+s%u-x))%((&1-s)%v+s%u-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%u-x)))< d ))`,
505 REWRITE_TAC[VECTOR_ARITH`A%B-C%B=(A-C)%B`;NORM_MUL]
506 THEN REPEAT STRIP_TAC
507 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
508 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
510 THEN POP_ASSUM MP_TAC
511 THEN DISCH_THEN(LABEL_TAC"A")
512 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
514 THEN POP_ASSUM MP_TAC
515 THEN DISCH_THEN(LABEL_TAC"B")
516 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`]bounded_convex_fan)
518 THEN POP_ASSUM MP_TAC
519 THEN DISCH_THEN(LABEL_TAC"C")
520 THEN EXISTS_TAC`min (h*h*(inv (h'))* inv(norm(u-w:real^3))*d:real) (&1)`
521 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
522 ` (u:real^3)`] remark1_fan)
524 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
526 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
527 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
529 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
531 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
533 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
535 THEN MP_TAC(REAL_ARITH`&0 <(h':real)==> ~(h'= &0)`)
537 THEN MP_TAC(ISPEC`(h':real)`REAL_MUL_LINV)
539 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LE_INV)
541 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LT_INV)
543 THEN MP_TAC(ISPEC`(h:real)`REAL_LT_INV)
545 THEN MP_TAC(REAL_ARITH`&0 <inv (h:real)==> &0 <= inv(h)`)
547 THEN MP_TAC(ISPEC`(h':real)`REAL_LT_INV)
549 THEN MP_TAC(REAL_ARITH`&0 <inv (h':real)==> &0 <= inv(h')`)
553 MP_TAC(ISPECL[`(h:real)`;`inv (h':real) `]REAL_LT_MUL)
555 THEN MP_TAC(ISPECL[`(h:real)`;`(h:real)*inv (h':real) `]REAL_LT_MUL)
557 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real)`;`inv(norm(u-w:real^3))`]REAL_LT_MUL)
559 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real) *inv(norm(u-w:real^3))`;`d:real`]REAL_LT_MUL)
561 THEN POP_ASSUM MP_TAC
562 THEN POP_ASSUM MP_TAC
563 THEN REAL_ARITH_TAC;(*1*)
572 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3)`;` s:real`]expansion1_convex_fan)
574 THEN REMOVE_THEN "C"(fun th->MP_TAC(ISPEC`(&1 - s) % v + s % u:real^3`th))
575 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
577 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`]
578 origin_point_not1_in_convex_fan)
580 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%u:real^3)` ASSUME_TAC
583 THEN MATCH_MP_TAC MONO_NOT
586 MP_TAC(ISPECL[`(&1-s)%v+s%u:real^3`;`x:real^3`]imp_norm_not_zero_fan)
587 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
589 THEN ASSUME_TAC(ISPEC`(&1-s)%v+s%u-x:real^3`NORM_POS_LE)
590 THEN MP_TAC(REAL_ARITH`~(norm((&1-s)%v+s%u-x:real^3)= &0) /\ &0 <= norm((&1-s)%v+s%u-x:real^3)==> &0 <norm((&1-s)%v+s%u-x:real^3)`)
592 THEN MP_TAC(ISPEC`(norm((&1-s)%v+s%u-x:real^3))`REAL_MUL_LINV)
594 THEN MP_TAC(ISPEC`(norm((&1-s)%v+s%u-x:real^3))`REAL_LE_INV)
596 THEN MP_TAC(REAL_ARITH`(t:real)< min (h * h * inv h' * inv (norm (u - w)) * d) (&1)/\ min (h * h * inv h' * inv (norm (u - w)) * d) (&1)<= &1 ==> t<= &1/\ (t:real)< (h * h * inv h' * inv (norm (u - w:real^3)) * d) `)
597 THEN ASM_REWRITE_TAC[REAL_ARITH`min (h * h * inv h' * inv (norm (u - w:real^3)) * d) (&1)<= &1`]
599 THEN MP_TAC(ISPECL[`norm ((&1 - s) % v + s % u - x:real^3) `;
600 `(h':real)`;`t:real`;`(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
602 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(&0:real) `;`s:real`]expansion_convex_fan)
603 THEN REDUCE_ARITH_TAC
604 THEN REDUCE_VECTOR_TAC
605 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0/\ &0<= &1`]
607 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`((&1 - s) % v + s % u:real^3)`th))
608 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
610 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % u-x:real^3)`]REAL_LT_INV2)
612 THEN MP_TAC(ISPECL[`norm((&1-s)%v+s%u-x:real^3)`;`t:real`]REAL_LE_MUL)
614 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % u - x:real^3))`;`inv(h:real)`;`norm ((&1 - s) % v + s % u - x:real^3)*(t:real)`;`(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
616 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
617 THEN ASM_REWRITE_TAC[]
619 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`th))
620 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
622 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_LT_INV2)
624 THEN MP_TAC(ISPECL[`inv(norm((&1-s)%v+s%u-x:real^3))`;`norm((&1-s)%v+s%u-x:real^3)*(t:real)`]REAL_LE_MUL)
626 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
627 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
629 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3))`;`inv(h:real)`;`inv(norm ((&1 - s) % v + s % u - x:real^3)) * norm ((&1 - s) % v + s % u - x:real^3)*(t:real)`;`inv(h:real)*(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
631 THEN MP_TAC(ISPECL[`norm (u - w:real^3)`;
632 `inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)) *
633 inv (norm ((&1 - s) % v + s % u - x)) *
634 norm ((&1 - s) % v + s % u - x) *
635 t`;`inv h * inv h * h' * h * h * inv h' * inv (norm (u - w:real^3)) * d`;]REAL_LT_LMUL)
637 THEN POP_ASSUM MP_TAC
638 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(B*C)*E*A*D`]
639 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
640 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
641 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D=(A*B)*C*D`]
642 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*(C*D)*E`]
643 THEN ONCE_REWRITE_TAC[REAL_ARITH`(A*B*C)*D*E=A*B*(C*D)*E`]
644 THEN ASM_REWRITE_TAC[]
645 THEN REDUCE_ARITH_TAC
646 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C)*D=A*B*(C*D)`]
647 THEN REDUCE_ARITH_TAC
648 THEN ASM_REWRITE_TAC[REAL_ARITH`((A*B)*C*D)*E=(A*C)*(B*D)*E`]
649 THEN REDUCE_ARITH_TAC
650 THEN REWRITE_TAC[REAL_ARITH`((A*B)*C)*D*E=(A*B)*(C*D)*E`]
651 THEN ASSUME_TAC(ISPECL[`u:real^3`;`w:real^3`]NORM_SUB)
652 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
653 THEN MP_TAC(ISPECL[`t:real`;`w-u:real^3`]NORM_MUL)
654 THEN MP_TAC(ISPEC`t:real`REAL_ABS_REFL)
657 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
658 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B)*C*D=C*A*(B*D)`]
659 THEN REDUCE_ARITH_TAC
660 THEN DISCH_THEN(LABEL_TAC"BA")
661 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
663 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3)` ASSUME_TAC
666 THEN DISCH_THEN (LABEL_TAC"MA")
668 THEN REMOVE_THEN"MA" MP_TAC
669 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
670 THEN ASM_REWRITE_TAC[];(*4*)
672 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
673 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
675 THEN MP_TAC(ISPECL[`norm((&1 - s) % v + s % u-x:real^3)`;`norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_SUB_INV)
677 THEN ASM_REWRITE_TAC[REAL_ABS_ABS;REAL_ABS_DIV;REAL_ABS_MUL;REAL_ABS_NORM;real_div;REAL_INV_MUL;
678 REAL_ARITH`(A*B*C)*D=A*C*(B*D)`]
679 THEN REDUCE_ARITH_TAC
680 THEN MP_TAC(ISPECL[`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`;`((&1 - s) % v + s % u-x:real^3)`]REAL_ABS_SUB_NORM)
681 THEN REWRITE_TAC[VECTOR_ARITH`
682 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)-((&1 - s) % v + s % u - x)=s%(t)%(w-u) :real^3`]
683 THEN ONCE_REWRITE_TAC[NORM_MUL]
684 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
687 THEN MP_TAC(ISPECL[`abs
688 (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3) -
689 norm ((&1 - s) % v + s % u - x))`;`s * norm (t % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_RMUL)
691 THEN REMOVE_THEN "BA" MP_TAC
692 THEN POP_ASSUM MP_TAC
693 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1)\/ ~((s:real) = &1)`)
696 THEN REAL_ARITH_TAC;(*5*)
698 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
700 THEN ASSUME_TAC(ISPEC`(t % (w - u):real^3)`NORM_POS_LE)
701 THEN MP_TAC(ISPECL[`norm (t % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_MUL)
703 THEN REPEAT STRIP_TAC
704 THEN MP_TAC(ISPECL[`s:real`;`&1`;`norm (t % (w - u)) *
705 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`;
706 `d:real`]REAL_LT_MUL2)
707 THEN REDUCE_ARITH_TAC
708 THEN ASM_REWRITE_TAC[]
709 THEN POP_ASSUM MP_TAC
710 THEN POP_ASSUM MP_TAC
711 THEN POP_ASSUM MP_TAC
712 THEN REAL_ARITH_TAC]]]]]);;
718 let exists_point_small_edges_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real.
719 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
721 ?(h:real). &0 <h /\ h<= &1
722 /\ (!t:real. &0 <= t /\ t<h
723 ==> (!(s:real). &0 <= s /\ s <= &1
724 ==> norm(inv(norm((&1-s)%v+s%u-x))%((&1-s)%v+s%u-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%((&1-t)%u+ t%w)-x))< d ))`,
727 THEN MP_TAC(REAL_ARITH`&0< (d:real)==> &0< d/ &2`)
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)
731 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`;` (d:real)/ &2`]inequaility2_fan)
733 THEN POP_ASSUM MP_TAC
734 THEN DISCH_THEN (LABEL_TAC"A")
735 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool) `;`(v:real^3)`;` (u:real^3)`;` (w:real^3)`;` (d:real)/ &2`]inequality1_fan)
737 THEN POP_ASSUM MP_TAC
738 THEN DISCH_THEN (LABEL_TAC"B")
739 THEN EXISTS_TAC`min (h:real) (h':real)`
750 THEN MP_TAC(REAL_ARITH`t< min (h:real) (h':real)==> t< (h:real) /\ t< (h':real)`)
752 THEN REMOVE_THEN"B" (fun th-> MP_TAC(ISPEC`t:real`th))
754 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
756 THEN POP_ASSUM MP_TAC
757 THEN DISCH_THEN (LABEL_TAC"B")
758 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
760 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
762 THEN POP_ASSUM MP_TAC
763 THEN DISCH_THEN (LABEL_TAC"A")
764 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
765 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
767 THEN MP_TAC(ISPECL[`s *
768 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`;`(u - ((&1 - t) % u + t % w)):real^3`]NORM_MUL)
769 THEN REWRITE_TAC[REAL_ABS_MUL]
770 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
772 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`REAL_ABS_REFL)
774 THEN REWRITE_TAC[REAL_ARITH`(A*B)*C=A*B*C`]
776 THEN REMOVE_THEN"B"MP_TAC
777 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
778 THEN REWRITE_TAC[VECTOR_ARITH`(s * inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x))) %
779 (u - ((&1 - t) % u + t % w))= inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
780 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3`]
783 THEN MP_TAC(ISPECL[`norm(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
784 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;`(d:real)/ &2`;
786 (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
787 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
788 ((&1 - s) % v + s % u - x):real^3)`;`(d:real)/ &2`;
791 THEN POP_ASSUM MP_TAC
792 THEN REWRITE_TAC[REAL_ARITH`d / &2 + d/ &2 = d`]
793 THEN MP_TAC(ISPECL[`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
794 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;
795 `(inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
796 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
797 ((&1 - s) % v + s % u - x):real^3)`]NORM_TRIANGLE)
798 THEN REWRITE_TAC[VECTOR_ARITH`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
799 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)+
800 (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
801 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
802 ((&1 - s) % v + s % u - x):real^3)=(inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
803 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
804 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) `]
805 THEN REAL_ARITH_TAC]]);;
811 let same_projective_sphere_ge_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (t:real) (y1:real^3).
812 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~collinear {x, v, (&1 - t) % u + t % w}
814 /\ (y1 IN aff_ge {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x)
816 ==> ?s:real. &0 <= s/\ s<= &1
817 /\ y1=inv(norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x))%((&1 - s) % v + s % ((&1 - t) % u + t % w)-x)+x`,
819 THEN POP_ASSUM MP_TAC
820 THEN DISCH_THEN(LABEL_TAC"A")
821 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]th3)
823 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]AFF_GE_1_2)
825 THEN REMOVE_THEN"A" MP_TAC
826 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist;ballnorm_fan]
828 THEN SUBGOAL_THEN`~(&1 - t1:real= &0)/\ &0 <= &1-t1` ASSUME_TAC
833 FIND_ASSUM MP_TAC`t1+t2+t3= &1:real`
835 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
836 THEN REWRITE_TAC[REAL_ARITH`(A+B)-A=B`]
838 THEN MP_TAC(REAL_ARITH`(&0 <= t2) /\ (&0 <= t3) /\(t2+t3= &0)==> t2= &0 /\ t3= &0`)
840 THEN FIND_ASSUM MP_TAC`y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w)
842 THEN FIND_ASSUM MP_TAC`t1+t2+t3= &1:real`
843 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
844 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
845 THEN REDUCE_ARITH_TAC
846 THEN REDUCE_VECTOR_TAC
848 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
849 THEN REDUCE_VECTOR_TAC
850 THEN ASM_REWRITE_TAC[];
852 THEN REMOVE_ASSUM_TAC
853 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
854 THEN POP_ASSUM MP_TAC
855 THEN POP_ASSUM MP_TAC
856 THEN MP_TAC(ISPECL[`t2:real`;`t3:real`]REAL_LT_ADD)
857 THEN REAL_ARITH_TAC];
859 MP_TAC(REAL_ARITH`~(&1 - t1= &0)/\ &0 <= &1-t1==> &0< (&1 -t1:real)`)
861 THEN MP_TAC(ISPEC`(&1 -t1:real)`REAL_LE_INV)
863 THEN MP_TAC(ISPEC`(&1-t1:real)`REAL_MUL_LINV)
865 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t2:real)`]REAL_LE_MUL)
867 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t3:real)`]REAL_LE_MUL)
869 THEN FIND_ASSUM MP_TAC `t1+t2+t3= &1:real`
870 THEN REWRITE_TAC[REAL_ARITH`A+B+C=D<=>B+C=D-A`]
872 THEN MP_TAC(SET_RULE`t2+t3 = &1-t1 ==> (inv (&1-t1))*(t2+t3) = (inv (&1-t1))* (&1-t1:real)`)
873 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
874 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)=D<=>D- A*C=A*B`]
875 THEN REDUCE_ARITH_TAC
877 THEN EXISTS_TAC`inv ((&1 - t1:real))*(t3:real)`
886 ASM_REWRITE_TAC[VECTOR_ARITH`(inv (&1 - t1) * t2) % v +
887 (inv (&1 - t1) * t3) % ((&1 - t) % u + t % w)-x= inv (&1 - t1) %( t2 % v + t3 % ((&1 - t) % u + t % w))-x:real^3`]
888 THEN FIND_ASSUM MP_TAC `norm(x-y1:real^3)= &1`
889 THEN FIND_ASSUM MP_TAC `y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w):real^3`
891 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
892 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
893 THEN REWRITE_TAC[VECTOR_ARITH`(B%A+C+D)-A=C+D-(&1-B)%A`]
895 THEN MP_TAC(SET_RULE`norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3) = &1 ==> (inv (&1-t1))*(norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x) ) = (inv (&1-t1))* (&1):real`)
896 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
897 THEN ASM_REWRITE_TAC[]
898 THEN REDUCE_ARITH_TAC
899 THEN MP_TAC(ISPECL[`inv(&1-t1:real)`;`t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3`]NORM_MUL)
900 THEN MP_TAC(ISPEC`inv(&1-t1:real)`REAL_ABS_REFL)
903 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
904 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-E%D)=A%(B+C)-(A*E)%D`]
905 THEN REDUCE_VECTOR_TAC
907 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
908 THEN ASM_REWRITE_TAC[REAL_INV_INV;VECTOR_ARITH`(&1-A)%(B%C-D)+D= A%D+(B*(&1-A))%C:real^3`]
909 THEN REDUCE_VECTOR_TAC]]]);;
915 let same_projective_sphere_gt_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (t:real) (y1:real^3).
916 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~collinear {x, v, (&1 - t) % u + t % w}
917 /\ (y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x)
919 ==> ?s:real. &0 <= s/\ s<= &1
920 /\ y1=inv(norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x))%((&1 - s) % v + s % ((&1 - t) % u + t % w)-x)+x`,
922 THEN POP_ASSUM MP_TAC
923 THEN DISCH_THEN(LABEL_TAC"A")
924 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]th3)
926 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]AFF_GT_1_2)
928 THEN REMOVE_THEN"A" MP_TAC
929 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist;ballnorm_fan]
931 THEN SUBGOAL_THEN`~(&1 - t1= &0)/\ &0 < &1-t1` ASSUME_TAC
934 THEN REMOVE_ASSUM_TAC
935 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
936 THEN POP_ASSUM MP_TAC
937 THEN POP_ASSUM MP_TAC
938 THEN MP_TAC(ISPECL[`t2:real`;`t3:real`]REAL_LT_ADD)
941 MP_TAC(ISPEC`(&1 -t1:real)`REAL_LT_INV)
943 THEN MP_TAC(ISPEC`(&1-t1:real)`REAL_MUL_LINV)
945 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t2:real)`]REAL_LT_MUL)
947 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t3:real)`]REAL_LT_MUL)
949 THEN FIND_ASSUM MP_TAC `t1+t2+t3= &1:real`
950 THEN REWRITE_TAC[REAL_ARITH`A+B+C=D<=>B+C=D-A`]
952 THEN MP_TAC(SET_RULE`t2+t3 = &1-t1 ==> (inv (&1-t1))*(t2+t3) = (inv (&1-t1))* (&1-t1:real)`)
953 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
954 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)=D<=>D- A*C=A*B`]
955 THEN REDUCE_ARITH_TAC
957 THEN EXISTS_TAC`inv ((&1 - t1:real))*(t3:real)`
966 ASM_REWRITE_TAC[VECTOR_ARITH`(inv (&1 - t1) * t2) % v +
967 (inv (&1 - t1) * t3) % ((&1 - t) % u + t % w)-x= inv (&1 - t1) %( t2 % v + t3 % ((&1 - t) % u + t % w))-x:real^3`]
968 THEN FIND_ASSUM MP_TAC `norm(x-y1:real^3)= &1`
969 THEN FIND_ASSUM MP_TAC `y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w):real^3`
971 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
972 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
973 THEN REWRITE_TAC[VECTOR_ARITH`(B%A+C+D)-A=C+D-(&1-B)%A`]
975 THEN MP_TAC(SET_RULE`norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3) = &1 ==> (inv (&1-t1))*(norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x) ) = (inv (&1-t1))* (&1):real`)
976 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
977 THEN ASM_REWRITE_TAC[]
978 THEN REDUCE_ARITH_TAC
979 THEN MP_TAC(REAL_ARITH`&0<inv(&1-t1:real)==> &0<= inv(&1-t1:real)`)
981 THEN MP_TAC(ISPECL[`inv(&1-t1:real)`;`t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3`]NORM_MUL)
982 THEN MP_TAC(ISPEC`inv(&1-t1:real)`REAL_ABS_REFL)
985 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
986 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-E%D)=A%(B+C)-(A*E)%D`]
987 THEN REDUCE_VECTOR_TAC
989 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
990 THEN ASM_REWRITE_TAC[REAL_INV_INV;VECTOR_ARITH`(&1-A)%(B%C-D)+D= A%D+(B*(&1-A))%C:real^3`]
991 THEN REDUCE_VECTOR_TAC]]]);;
995 let separate1_sphere_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (v1:real^3) (u1:real^3).
997 FAN(x,V,E) /\ {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
998 /\ ~(coplanar{x,v,u,w})
1001 (&0 < h) /\ (h<= &1)
1003 (!t:real. &0<t /\ t<h
1004 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge {x} {v1, u1} INTER ballnorm_fan x={})`,
1007 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1009 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1011 THEN MRESA_TAC exist_close_fan[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;
1012 `(v1:real^3)`;` (u1:real^3)`]
1013 THEN POP_ASSUM MP_TAC
1014 THEN DISCH_THEN(LABEL_TAC"THA")
1015 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1016 THEN POP_ASSUM MP_TAC
1017 THEN DISCH_THEN(LABEL_TAC"A" )
1018 THEN MRESA_TAC exists_point_small_edges_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;`h:real`]
1019 THEN POP_ASSUM MP_TAC
1020 THEN DISCH_THEN(LABEL_TAC"B" )
1021 THEN EXISTS_TAC`min ((h':real)/ &2) (t1:real)`
1022 THEN ASM_REWRITE_TAC[]
1026 THEN REAL_ARITH_TAC;(*1*)
1032 THEN REAL_ARITH_TAC;(*2*)
1035 THEN REWRITE_TAC[EXTENSION]
1041 THEN REWRITE_TAC[EMPTY;IN_ELIM_THM]
1042 THEN SUBGOAL_THEN `!y1:real^3.
1043 y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x
1044 ==> ?y2:real^3. y2 IN aff_ge {x:real^3} {(v:real^3), (u:real^3)} INTER ballnorm_fan x /\
1045 dist (y1,y2)<(h:real)` ASSUME_TAC
1047 MP_TAC(REAL_ARITH`&0 <(t:real)/\ &0< h' /\ t < min ((h':real)/ &2) (t1:real)==> &0 <= t /\ t<=t1 /\ t< h'`)
1049 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
1051 THEN REPEAT STRIP_TAC
1052 THEN MRESA_TAC same_projective_sphere_gt_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;` (t:real) `;`(y1:real^3)`]
1053 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1054 THEN MRESA_TAC AFF_GE_1_2[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
1055 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist]
1056 THEN MRESA_TAC expansion1_convex_fan[`(v:real^3)`;` (u:real^3)`;` s:real`]
1057 THEN MRESA_TAC origin_point_not1_in_convex_fan[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`]
1058 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%u:real^3)` ASSUME_TAC
1061 THEN MATCH_MP_TAC MONO_NOT
1064 MP_TAC(ISPECL[`x:real^3`;`(&1 - s) % v + s % u:real^3`]imp_norm_not_zero_fan)
1065 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
1066 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
1068 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % u-x:real^3`NORM_POS_LE)
1069 THEN MP_TAC(REAL_ARITH`~(&0 =norm((&1 - s) % v + s % u-x:real^3)) /\ &0 <= norm((&1 - s) % v + s % u-x:real^3)==> &0 <norm((&1 - s) % v + s % u-x:real^3)`)
1071 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % u-x:real^3))`REAL_MUL_LINV)
1073 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % u-x:real^3))`REAL_LE_INV)
1075 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x)) %
1076 ((&1 - s) % v + s % u - x) +x:real^3`
1081 EXISTS_TAC`&1 - inv (norm ((&1 - s) % v + s % u - x:real^3)) `
1082 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x:real^3)) * (&1 - s)`
1083 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x:real^3)) * (s)`
1084 THEN REWRITE_TAC[VECTOR_ARITH`A%(B%C + a%b-c)+c=(&1-A)%c+(A*B)%C+(A*a)%b:real^3`]
1085 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-A+A*(&1-C)+A*C= &1`]
1087 THEN MATCH_MP_TAC REAL_LE_MUL
1088 THEN ASM_REWRITE_TAC[]
1090 THEN REAL_ARITH_TAC;(*7*)
1092 REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`A-(B+A)=(--B):real^3`;NORM_NEG;NORM_MUL]
1093 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % u - x:real^3))`REAL_ABS_REFL)
1095 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
1097 ASM_REWRITE_TAC[VECTOR_ARITH`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1098 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) +
1100 (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) + x)=
1101 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1102 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) -
1103 (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) ):real^3`]
1104 THEN REMOVE_THEN "B" (fun th-> MP_TAC(ISPEC`t:real`th))
1106 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
1108 THEN ASM_REWRITE_TAC[NORM_SUB]](*6*)](*5*);(*4*)
1109 POP_ASSUM (fun th->MP_TAC(ISPEC`x':real^3`th))
1110 THEN MP_TAC(SET_RULE` x' IN aff_gt {x} {v, (&1 - t) % u + t % w} INTER aff_ge {x} {v1, u1} INTER
1111 ballnorm_fan x ==> x' IN aff_ge {x} {v1, u1:real^3} INTER ballnorm_fan x
1112 /\ x' IN aff_gt {x} {v, (&1 - t) % u + t % w:real^3} INTER ballnorm_fan x`)
1113 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1114 THEN REPEAT STRIP_TAC
1115 THEN POP_ASSUM MP_TAC
1116 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
1118 THEN REPEAT STRIP_TAC
1119 THEN REMOVE_THEN "THA" (fun th-> MP_TAC(ISPECL[`y2:real^3`;`x':real^3`]th))
1120 THEN POP_ASSUM MP_TAC
1121 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1122 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1123 THEN SIMP_TAC[dist;NORM_SUB]
1124 THEN REAL_ARITH_TAC](*4*);(*3*)
1131 let fan_run_in_small1_is_fan=prove(
1132 `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 u1:real^3.
1133 FAN(x,V,E) /\ {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
1134 /\ ~(coplanar{x,v,u,w})
1136 ?t1:real. &0 < t1 /\ t1 <= &1
1137 /\ (!t:real. &0< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={})`,
1140 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1142 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
1144 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1145 THEN POP_ASSUM MP_TAC
1146 THEN DISCH_THEN (LABEL_TAC"BA")
1147 THEN MRESA_TAC separate1_sphere_fan[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3)`;` (w:real^3)`;` (v1:real^3)`;`(u1:real^3)`]
1148 THEN POP_ASSUM MP_TAC
1149 THEN DISCH_THEN (LABEL_TAC"A")
1150 THEN REPEAT STRIP_TAC
1151 THEN MP_TAC(REAL_ARITH` &0 < t1/\ &0 < h ==> &0 < min (h:real) (t1:real)`)
1153 THEN MP_TAC(REAL_ARITH` t1 <= &1 /\ h <= &1==> min (h:real) (t1:real)<= &1`)
1155 THEN EXISTS_TAC`min (h:real) (t1:real)`
1156 THEN ASM_REWRITE_TAC[]
1157 THEN REPEAT STRIP_TAC
1158 THEN MP_TAC(REAL_ARITH` &0 < t /\ t< min (h:real) (t1:real)==> t< h /\ t<= t1 /\ &0 <= t`)
1160 THEN REMOVE_THEN "A"(fun th-> MRESA1_TAC th `(t:real)`)
1161 THEN POP_ASSUM MP_TAC
1162 THEN DISCH_THEN (LABEL_TAC"A")
1163 THEN REMOVE_THEN "BA"(fun th-> MRESA1_TAC th `(t:real)`)
1164 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1165 THEN MRESA_TAC origin_is_not_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
1166 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
1169 THENL[ REPEAT STRIP_TAC
1170 THEN SUBGOAL_THEN`~(x=x':real^3)`ASSUME_TAC
1173 THEN POP_ASSUM MP_TAC
1174 THEN POP_ASSUM MP_TAC
1176 MRESA_TAC imp_norm_not_zero_fan[`x':real^3`;`x:real^3`]
1177 THEN ASSUME_TAC(ISPEC`x'-x:real^3`NORM_POS_LE)
1178 THEN MP_TAC(REAL_ARITH`~(norm(x'-x:real^3)= &0) /\ &0 <= norm(x'-x:real^3)==> &0 <norm(x'-x:real^3)`)
1180 THEN MRESA1_TAC REAL_LE_INV `norm(x'-x:real^3)`
1181 THEN MRESA1_TAC REAL_LT_INV `norm(x'-x:real^3)`
1182 THEN MRESA1_TAC REAL_MUL_LINV `norm(x'-x:real^3)`
1183 THEN MRESA_TAC scale_aff_ge_fan[`x:real^3`;`v1:real^3`;`u1:real^3`]
1184 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
1185 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
1186 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
1187 THEN SUBGOAL_THEN`inv (norm (x' - x)) % (x' - x) + x IN ballnorm_fan x:real^3->bool` ASSUME_TAC
1189 MRESA1_TAC REAL_ABS_REFL `inv(norm(x'-x:real^3))`
1190 THEN ASM_REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`B-(A+B)= --A:real^3`;NORM_NEG;NORM_MUL];
1198 let fan_run_in_small21_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1199 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E
1200 /\ ~coplanar {x,v,u,w}
1202 ?t1:real. &0<t1 /\ t1<= &1
1203 /\ (!t:real. &0< t /\ t<= t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
1206 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1207 THEN POP_ASSUM MP_TAC
1208 THEN DISCH_THEN (LABEL_TAC"A")
1209 THEN DISJ_CASES_TAC(SET_RULE`(?h:real. &0<h /\ h<= &1/\ azim x v u w1=azim x v u ((&1-h)%u+h%w:real^3))\/ ~(?h:real. &0<h /\ h<= &1 /\ azim x v u ((&1-h)%u+h%w:real^3)=azim x v u w1)`)
1213 THEN EXISTS_TAC`min (t1:real) ((h:real)/ &2)`
1217 THEN REAL_ARITH_TAC;(*2*)
1221 THEN REAL_ARITH_TAC;(*3*)
1223 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
1225 THEN MP_TAC(REAL_ARITH`(t:real)<= min (t1:real) (h:real/ &2) ==> t <= t1`)
1227 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1228 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1229 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1231 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1233 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
1238 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
1241 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1242 THEN MRESAL_TAC AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1243 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1245 THEN POP_ASSUM MP_TAC
1246 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1247 t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
1248 (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
1249 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1251 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
1253 THEN MP_TAC(SET_RULE`
1254 t3 % ((&1 - t) % u + t % w) = (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3
1255 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1''-t1') % x + (t2'-t2) % v + t3' % w1)`)
1256 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1257 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
1258 THEN REDUCE_VECTOR_TAC
1260 THEN FIND_ASSUM MP_TAC`t1'' + t2' + t3' = &1:real`
1261 THEN FIND_ASSUM MP_TAC`t1' + t2 + t3 = &1:real`
1263 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
1264 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
1266 THEN MP_TAC(SET_RULE`
1267 (t1''-t1') + (t2'-t2) + t3' = t3
1268 ==> (inv (t3))*((t1''-t1') + (t2'-t2) + t3') = (inv (t3))*t3`)
1269 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1270 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
1272 THEN EXISTS_TAC`inv t3 * (t1'' - t1'):real`
1273 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
1274 THEN EXISTS_TAC`inv t3 * t3':real`
1275 THEN ASM_REWRITE_TAC[]
1276 THEN MATCH_MP_TAC REAL_LE_MUL
1277 THEN ASM_REWRITE_TAC[]
1278 THEN MATCH_MP_TAC REAL_LE_INV
1280 THEN REAL_ARITH_TAC;(*5*)
1281 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1282 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1283 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
1284 THEN MRESA_TAC injective_azim_coplanar[`x:real^3`;` v:real^3`;` u:real^3`;` w:real^3`]
1285 THEN POP_ASSUM (fun th->MRESA_TAC th [`h:real`;`t:real`])
1287 THEN REAL_ARITH_TAC](*5*)(*4*);
1290 THEN ONCE_REWRITE_TAC[NOT_EXISTS_THM]
1291 THEN DISCH_THEN(LABEL_TAC"B")
1292 THEN EXISTS_TAC`t1:real`
1293 THEN ASM_REWRITE_TAC[]
1294 THEN REPEAT STRIP_TAC
1295 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
1297 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1298 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1299 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1301 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1303 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
1308 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
1311 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1312 THEN MRESAL_TAC AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1313 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1315 THEN POP_ASSUM MP_TAC
1316 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1317 t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
1318 (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
1319 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1321 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
1323 THEN MP_TAC(SET_RULE`
1324 t3 % ((&1 - t) % u + t % w) = (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3
1325 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1''-t1') % x + (t2'-t2) % v + t3' % w1)`)
1326 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1327 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
1328 THEN REDUCE_VECTOR_TAC
1330 THEN FIND_ASSUM MP_TAC`t1'' + t2' + t3' = &1:real`
1331 THEN FIND_ASSUM MP_TAC`t1' + t2 + t3 = &1:real`
1333 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
1334 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
1336 THEN MP_TAC(SET_RULE`
1337 (t1''-t1') + (t2'-t2) + t3' = t3
1338 ==> (inv (t3))*((t1''-t1') + (t2'-t2) + t3') = (inv (t3))*t3`)
1339 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1340 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
1342 THEN EXISTS_TAC`inv t3 * (t1'' - t1'):real`
1343 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
1344 THEN EXISTS_TAC`inv t3 * t3':real`
1345 THEN ASM_REWRITE_TAC[]
1346 THEN MATCH_MP_TAC REAL_LE_MUL
1347 THEN ASM_REWRITE_TAC[]
1348 THEN MATCH_MP_TAC REAL_LE_INV
1350 THEN REAL_ARITH_TAC;(*3*)
1351 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1352 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1353 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
1354 THEN REMOVE_THEN "B"(fun th -> MRESAL1_TAC th `t:real`[DE_MORGAN_THM])
1356 THEN REAL_ARITH_TAC];
1361 let fan_run_in_small2_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3.
1362 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E
1363 /\ ~coplanar {x,v,u,w}
1365 ?t1:real. &0<t1 /\ t1<= &1
1366 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
1368 THEN MRESA_TAC fan_run_in_small21_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;` w:real^3`]
1369 THEN POP_ASSUM MP_TAC
1370 THEN DISCH_THEN(LABEL_TAC"A")
1371 THEN EXISTS_TAC`t1:real`
1372 THEN ASM_REWRITE_TAC[]
1373 THEN REPEAT STRIP_TAC
1374 THEN MP_TAC(REAL_ARITH`t<t1==>t<=t1`)
1375 THEN ASM_REWRITE_TAC[]
1376 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`));;
1380 let extension_in_aff_2_2_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
1381 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
1383 (!t:real. &0< t /\ t< &1
1384 ==> (!t1:real t2:real t3:real. &0<t3 /\ &0<t2 /\ t1+t2+t3= &1
1385 ==>t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w) IN aff_gt {x,u} {w,v}))`,
1387 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1389 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1391 THEN SUBGOAL_THEN `DISJOINT {x,u:real^3} {w,v:real^3}` ASSUME_TAC
1393 REWRITE_TAC[DISJOINT_SYM;SET_RULE`{v:real^3,w:real^3}= {v} UNION {w}`;DISJOINT_UNION]
1394 THEN REWRITE_TAC[SET_RULE`{v} UNION {w}={v:real^3,w:real^3}`]
1395 THEN ONCE_REWRITE_TAC[DISJOINT_SYM]
1396 THEN ASM_REWRITE_TAC[];
1397 MRESAL_TAC AFF_GT_2_2[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`][IN_ELIM_THM]
1398 THEN EXISTS_TAC`t1:real`
1399 THEN EXISTS_TAC`t3*(&1-t):real`
1400 THEN EXISTS_TAC`t3*(t):real`
1401 THEN EXISTS_TAC`t2:real`
1402 THEN ASM_REWRITE_TAC[REAL_ARITH`t1 + t3 * (&1 - t) + t3 * t +t2 = t1+t2+t3:real`;VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1403 t1 % x + (t3 * (&1 - t)) % u + (t3 * t) % w+ t2 % v:real^3`]
1404 THEN MATCH_MP_TAC REAL_LT_MUL
1406 THEN REAL_ARITH_TAC]);;
1410 let inequality3_aim_in_convex_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1411 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\
1412 (&0< azim x u w v ) /\ (azim x u w v <pi)
1414 (!t:real. &0< t /\ t< &1
1415 ==> (!t1:real t2:real t3:real. &0<t3 /\ &0<t2 /\ t1+t2+t3= &1
1416 ==> &0< azim x u w (t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w))
1417 /\ azim x u w (t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w))< azim x u w v))`,
1420 THEN FIND_ASSUM MP_TAC`{v,u} IN (E:(real^3->bool)->bool)`
1421 THEN ONCE_REWRITE_TAC[SET_RULE`{v,u}={u,v}`]
1423 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
1425 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1427 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;` u:real^3`;`w:real^3`;`v:real^3`]
1428 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
1430 THEN MRESA_TAC extension_in_aff_2_2_fan[`x:real^3`;` v:real^3`;`u:real^3`;`w:real^3`]
1431 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
1432 THEN POP_ASSUM(fun th-> MRESAL_TAC th [`t1:real`;`t2:real`;`t3:real`][wedge;IN_ELIM_THM]));;
1436 let fan_run_in_small3_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3.
1437 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {u,w1} IN E
1438 /\ ~coplanar {x,v,u,w} /\ sigma_fan x V E u w=v
1439 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1441 ?t1:real. &0<t1 /\ t1<= &1
1442 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {u,w1}={})`,
1444 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1445 THEN POP_ASSUM MP_TAC
1446 THEN DISCH_THEN (LABEL_TAC"A")
1447 THEN EXISTS_TAC`t1:real`
1448 THEN ASM_REWRITE_TAC[]
1449 THEN REPEAT STRIP_TAC
1450 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t /\ ~(t= &0)`)
1452 THEN MP_TAC(REAL_ARITH`t<t1 /\ t1<= &1==>t<=t1 /\ t< &1`)
1454 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1455 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1456 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1458 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1460 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
1464 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1466 THEN SUBGOAL_THEN `x' IN (aff_ge {x,u} {w1}:real^3->bool)`ASSUME_TAC
1469 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
1470 THEN MRESAL_TAC AFF_GE_2_1[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
1472 THEN EXISTS_TAC`t1'':real`
1473 THEN EXISTS_TAC`t2':real`
1474 THEN EXISTS_TAC`t3':real`
1475 THEN ASM_REWRITE_TAC[];(*2*)
1478 THEN ASM_REWRITE_TAC[]
1480 THEN MRESA_TAC inequality3_aim_in_convex_fan
1481 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
1482 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
1483 THEN POP_ASSUM(fun th-> MRESA_TAC th [`t1':real`;`t2:real`;`t3:real`])
1484 THEN POP_ASSUM MP_TAC
1485 THEN POP_ASSUM MP_TAC
1486 THEN DISCH_THEN(LABEL_TAC"BE")
1487 THEN DISCH_THEN(LABEL_TAC"YEU")
1488 THEN SUBGOAL_THEN`~collinear {x, u, x':real^3}`ASSUME_TAC
1490 MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
1491 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
1492 THEN ASM_REWRITE_TAC[collinear_fan;]
1493 THEN POP_ASSUM MP_TAC
1494 THEN MATCH_MP_TAC MONO_NOT
1495 THEN REWRITE_TAC[coplanar;aff; AFFINE_HULL_2;IN_ELIM_THM]
1497 THEN EXISTS_TAC`x:real^3`
1498 THEN EXISTS_TAC`v:real^3`
1499 THEN EXISTS_TAC`u:real^3`
1500 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1502 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1506 THEN REDUCE_ARITH_TAC
1507 THEN VECTOR_ARITH_TAC;(*4*)
1509 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1511 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1515 THEN REDUCE_ARITH_TAC
1516 THEN VECTOR_ARITH_TAC;(*5*)
1518 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1520 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1524 THEN REDUCE_ARITH_TAC
1525 THEN VECTOR_ARITH_TAC;(*6*)
1527 SUBGOAL_THEN`((&1 - t) % u + t % w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1529 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1530 THEN REMOVE_ASSUM_TAC
1531 THEN REMOVE_ASSUM_TAC
1532 THEN REMOVE_ASSUM_TAC
1533 THEN POP_ASSUM MP_TAC
1534 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1536 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
1538 THEN ASM_REWRITE_TAC[]
1539 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) = u' % x + v' % u
1540 <=>t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u:real^3`]
1542 THEN MP_TAC(SET_RULE`
1543 t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u
1544 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w) ) = (inv (t3))%((u'-t1') % x -t2 % v+v' % u):real^3`)
1545 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1546 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B-C+D)=A%B-A%C+A%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
1547 THEN REDUCE_VECTOR_TAC
1549 THEN EXISTS_TAC`(inv t3 * (u' - t1')):real`
1550 THEN EXISTS_TAC`-- (inv t3 * t2):real`
1551 THEN EXISTS_TAC`(inv t3 * v'):real`
1552 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A+(--b)%C+d=A-b%C+d`;REAL_ARITH`inv t3 * (u' - t1') + --(inv t3 * t2) + inv t3 * v'=inv t3 * (t3+(u'+v') - (t1'+ t2+t3))`;REAL_ARITH`A+ &1- &1=A`];(*7*)
1555 THEN SET_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
1557 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1559 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
1560 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
1561 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`;`x':real^3`;]
1562 THEN REMOVE_THEN"BE" MP_TAC
1563 THEN REMOVE_THEN"YEU" MP_TAC
1564 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1565 THEN FIND_ASSUM MP_TAC`(sigma_fan x V E u w = (v:real^3))`
1567 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1568 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge u V E = {w:real^3}) \/ ~(set_of_edge u V E = {w})`)
1570 FIND_ASSUM MP_TAC`w1 IN set_of_edge (u:real^3) V E`
1571 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th);IN_SING])
1573 THEN ASM_REWRITE_TAC[]
1574 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
1575 THEN REAL_ARITH_TAC;(*4*)
1577 DISJ_CASES_TAC(SET_RULE`(w1:real^3)=w \/ ~((w1:real^3)=w)`)
1580 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
1581 THEN REAL_ARITH_TAC;(*5*)
1583 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`]
1584 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
1585 THEN POP_ASSUM MP_TAC
1586 THEN REAL_ARITH_TAC]]]];
1591 let fan_run_in_small_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 w1:real^3.
1592 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v1,w1} IN E
1593 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1594 /\ sigma_fan x V E u w = v
1596 ?t1:real. &0<t1 /\ t1<= &1
1597 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,w1}={})`,
1598 (let lem=prove(`!x v v1. aff_ge {x} {v1, v}=aff_ge {x} {v, v1}`,
1600 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
1604 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
1605 THEN DISJ_CASES_TAC(SET_RULE`(v1=v)\/ ~(v1=v:real^3)`)
1607 MRESA_TAC fan_run_in_small2_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v1:real^3`;`u:real^3`;` w:real^3`;`w1:real^3`];
1609 DISJ_CASES_TAC(SET_RULE`(v1=u)\/ ~(v1=u:real^3)`)
1611 MRESA_TAC fan_run_in_small3_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` v1:real^3`;` w:real^3`;`w1:real^3`];
1612 DISJ_CASES_TAC(SET_RULE`(w1=v)\/ ~(w1=v:real^3)`)
1614 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
1615 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
1617 THEN MRESA_TAC fan_run_in_small2_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w1:real^3`;`u:real^3`;` w:real^3`;`v1:real^3`]
1618 THEN EXISTS_TAC`t1:real`
1619 THEN ASM_REWRITE_TAC[lem];
1620 DISJ_CASES_TAC(SET_RULE`(w1=u)\/ ~(w1=u:real^3)`)
1622 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
1623 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
1625 THEN MRESA_TAC fan_run_in_small3_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` w1:real^3`;` w:real^3`;`v1:real^3`]
1626 THEN EXISTS_TAC`t1:real`
1627 THEN ASM_REWRITE_TAC[lem];
1628 SUBGOAL_THEN`{v,u} INTER {v1,w1:real^3}={}` ASSUME_TAC
1632 MRESA_TAC fan_run_in_small1_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`;`v1:real^3`;`w1:real^3`]]]]]]));;
1639 let fan_run1_in_small_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) (E':(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1640 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ E' SUBSET E
1641 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1642 /\ sigma_fan x V E u w = v
1644 ?h:real. &0<h /\ h<= &1
1645 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} INTER {v | ?e. e IN E' /\ v IN aff_ge {x} e}={})`,
1648 THEN MRESA_TAC set_edges_is_finite_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1649 THEN MRESA_TAC FINITE_SUBSET [`(E':(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`]
1650 THEN ABBREV_TAC`n=CARD (E':(real^3->bool)->bool)`
1651 THEN REPEAT(POP_ASSUM MP_TAC)
1652 THEN SPEC_TAC (`(E':(real^3->bool)->bool)`,`(E':(real^3->bool)->bool)`)
1653 THEN SPEC_TAC (`n:num`,`n:num`)
1657 THEN MP_TAC(ISPECL[`E':(real^3->bool)->bool`]CARD_EQ_0)
1659 THEN EXISTS_TAC`&1 / &2`
1660 THEN REWRITE_TAC[REAL_ARITH`&0< &1/ &2`;REAL_ARITH`&1 / &2 <= &1`]
1661 THEN ASM_SET_TAC[];(*1*)
1664 THEN POP_ASSUM MP_TAC
1665 THEN DISCH_THEN (LABEL_TAC "A")
1666 THEN REPEAT STRIP_TAC
1667 THEN MP_TAC(ISPEC`(E':(real^3->bool)->bool)` CHOOSE_SUBSET)
1669 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`n:num `th))
1670 THEN REWRITE_TAC[ARITH_RULE `n:num <= SUC n`; HAS_SIZE]
1672 THEN MP_TAC(SET_RULE` t SUBSET E' /\ E' SUBSET E ==> (t:(real^3->bool)->bool) SUBSET E`)
1674 THEN REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`(t:(real^3->bool)->bool)`th))
1676 THEN POP_ASSUM MP_TAC
1677 THEN DISCH_THEN(LABEL_TAC"YEU")
1678 THEN SUBGOAL_THEN `~((E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)= {})` ASSUME_TAC
1681 THEN MP_TAC(SET_RULE`(E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)={} /\ t SUBSET E' ==> t= E'`)
1683 THEN FIND_ASSUM MP_TAC`CARD (t:(real^3->bool)->bool)=n`
1684 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1685 THEN ASM_REWRITE_TAC[]
1686 THEN ARITH_TAC;(*2*)
1687 SUBGOAL_THEN`?e. e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)` ASSUME_TAC
1693 THEN MP_TAC(SET_RULE`e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)/\
1694 (E':(real^3->bool)->bool) SUBSET (E:(real^3->bool)->bool) /\ t SUBSET E' ==> e IN E'/\ e IN E/\ ~(e IN t) /\ {e} UNION t SUBSET E'`)
1696 THEN MP_TAC(ISPECL [`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`(E':(real^3->bool)->bool)`] FINITE_SUBSET)
1698 THEN ASSUME_TAC(SET_RULE`e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
1699 THEN MP_TAC(ISPECL[`e:real^3->bool`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;]CARD_DELETE)
1701 THEN MP_TAC(SET_RULE `e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)
1702 ==> ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e PSUBSET {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
1704 THEN MP_TAC(ISPECL[`({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))DELETE e`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`]CARD_PSUBSET)
1705 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1706 THEN FIND_ASSUM MP_TAC`FINITE ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`
1708 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1710 THEN MP_TAC(ARITH_RULE`CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) < CARD ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))
1711 /\ CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) = CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))-1
1712 <=>CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) +1= CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`)
1713 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1714 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
1715 THEN REWRITE_TAC[ARITH_RULE`A=A`; ]
1716 THEN MP_TAC(SET_RULE`~(e IN t)==>({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e=t`)
1718 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1719 THEN FIND_ASSUM MP_TAC`(CARD (E':(real^3->bool)->bool)=SUC n)`
1720 THEN REWRITE_TAC[ARITH_RULE`SUC n=(n:num) +1`]
1722 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
1724 THEN MP_TAC(ISPECL[`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`E':(real^3->bool)->bool`]CARD_SUBSET_EQ)
1725 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
1727 THEN POP_ASSUM MP_TAC
1728 THEN DISCH_THEN(LABEL_TAC"MA")
1729 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
1731 THEN MRESA_TAC fan_run_in_small_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`;`v':real^3`;`w':real^3`]
1732 THEN POP_ASSUM MP_TAC
1733 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
1734 THEN POP_ASSUM MP_TAC
1737 THEN POP_ASSUM MP_TAC
1738 THEN DISCH_THEN(LABEL_TAC"BE")
1739 THEN EXISTS_TAC` min (h:real) (t1:real)`
1743 THEN REAL_ARITH_TAC;(*4*)
1748 THEN REAL_ARITH_TAC;(*5*)
1750 THEN REMOVE_THEN "MA" MP_TAC
1752 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
1753 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION; INTER;]
1757 ASM_REWRITE_TAC[IN_SING]
1758 THEN MP_TAC(REAL_ARITH`s< min h t1==> s<h /\ s<t1`)
1765 THEN ASM_REWRITE_TAC[]
1766 THEN REMOVE_THEN "BE"(fun th-> MRESA1_TAC th `s:real`)
1770 THEN ASM_REWRITE_TAC[]
1771 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th `s:real`)
1772 THEN ASM_SET_TAC[]];
1777 let fan_run_in_small_is_not_meet_xfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1778 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
1779 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1780 /\ sigma_fan x V E u w = v
1782 ?h:real. &0<h /\ h<= &1
1783 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})`,
1786 THEN MP_TAC(ISPECL[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`u:real^3`;` (w:real^3)`]fan_run1_in_small_is_fan)
1788 THEN POP_ASSUM MP_TAC
1789 THEN REWRITE_TAC[SET_RULE`A SUBSET A`]
1791 THEN EXISTS_TAC`h:real`
1792 THEN ASM_REWRITE_TAC[]
1793 THEN ASM_SET_TAC[]);;
1795 let fan_run_in_small_is_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1796 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
1797 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1798 /\ sigma_fan x V E u w = v
1800 ?h:real. &0<h /\ h<= &1
1801 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} SUBSET yfan(x,V,E))`,
1803 THEN MP_TAC(ISPECL[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`u:real^3`;` (w:real^3)`]fan_run1_in_small_is_fan)
1805 THEN POP_ASSUM MP_TAC
1806 THEN REWRITE_TAC[SET_RULE`A SUBSET A`;yfan;xfan]
1808 THEN EXISTS_TAC`h:real`
1809 THEN ASM_REWRITE_TAC[]
1810 THEN ASM_SET_TAC[]);;
1813 let not_collinear_is_properties_fully_surrounded1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 t:real.
1814 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
1815 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1817 ==> ~ collinear {x,v,(&1-t)%u+ t % w}`,
1820 THEN POP_ASSUM MP_TAC
1822 THEN MP_TAC(REAL_ARITH`&0<=t /\ t<= &1 ==> t= &0 \/ t= &1 \/ (&0<t /\ t< &1)`)
1825 REDUCE_ARITH_TAC THEN REDUCE_VECTOR_TAC
1826 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1829 REWRITE_TAC[REAL_ARITH`&1- &1= &0`] THEN REDUCE_VECTOR_TAC
1830 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
1831 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`]
1832 THEN POP_ASSUM MATCH_MP_TAC
1833 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
1834 THEN ASM_REWRITE_TAC[];
1836 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1838 THEN MRESA_TAC collinear1_fan [`x:real^3`;`v:real^3`;`(&1-t)% u+t% w:real^3`]
1839 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
1840 THEN ASM_REWRITE_TAC[]
1841 THEN MRESA_TAC properties_fully_surrounded[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
1842 THEN POP_ASSUM MP_TAC
1843 THEN MATCH_MP_TAC MONO_NOT
1844 THEN REWRITE_TAC[aff; AFFINE_HULL_2; IN_ELIM_THM; coplanar]
1846 THEN EXISTS_TAC`x:real^3`
1847 THEN EXISTS_TAC`v:real^3`
1848 THEN EXISTS_TAC`u:real^3`
1849 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1851 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1855 THEN REDUCE_ARITH_TAC
1856 THEN VECTOR_ARITH_TAC;
1858 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1860 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1864 THEN REDUCE_ARITH_TAC
1865 THEN VECTOR_ARITH_TAC;
1867 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1869 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1873 THEN REDUCE_ARITH_TAC
1874 THEN VECTOR_ARITH_TAC;
1876 SUBGOAL_THEN`(w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1878 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1879 THEN REMOVE_ASSUM_TAC
1880 THEN REMOVE_ASSUM_TAC
1881 THEN REMOVE_ASSUM_TAC
1882 THEN POP_ASSUM MP_TAC
1883 THEN MP_TAC(REAL_ARITH`&0<t:real==> ~(t= &0)`)
1885 THEN MP_TAC(ISPEC`(t:real)`REAL_MUL_LINV)
1887 THEN ASM_REWRITE_TAC[]
1888 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t) % u + t % w = u' % x + v' % v
1889 <=>t % w = u' % x + v' % v-(&1 - t) % u :real^3`]
1891 THEN MP_TAC(SET_RULE`
1892 t % w = u' % x + v' % v-(&1 - t) % u
1893 ==> (inv (t))%(t % w ) = (inv (t))%(u' % x + v' % v-(&1 - t) % u ):real^3`)
1894 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1895 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-(&1-E)%D)=A%B+A%C+(A*E-A)%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
1896 THEN REDUCE_VECTOR_TAC
1898 THEN EXISTS_TAC`(inv t * u'):real`
1899 THEN EXISTS_TAC`(inv t * v'):real`
1900 THEN EXISTS_TAC`(&1-inv t):real`
1901 THEN ASM_REWRITE_TAC[REAL_ARITH`A*B+A*C+D-E=A*(B+C)+D-E`]
1903 THEN REAL_ARITH_TAC;
1906 THEN SET_TAC[]]]]]]);;
1911 let not_collinear_is_properties_fully_surrounded=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 t:real.
1912 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
1913 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1915 ==> ~ collinear {x,v,(&1-t)%u+ t % w}`,
1917 THEN POP_ASSUM MP_TAC
1919 THEN MP_TAC(REAL_ARITH`&0 <t /\ t < &1==> &0<= t /\ t <= &1`)
1921 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded1 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`t:real`]
1927 let exists_inf_element_fix_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u1:real^3 .
1928 FAN(x,V,E)/\ v IN V /\ CARD (set_of_edge v V E) >1
1930 (?(u:real^3). (u IN (set_of_edge v V E)) /\
1931 (!(w:real^3). (w IN (set_of_edge v V E)) ==> azim x v u1 u <= azim x v u1 w))`,
1934 FINITE X /\ ~(X = {})
1935 ==> ?a. a IN X /\ !x. x IN X ==> a <= x`,
1936 MESON_TAC[INF_FINITE]) in
1938 THEN DISCH_THEN(LABEL_TAC "a")
1939 THEN REPEAT GEN_TAC THEN REWRITE_TAC[FAN;fan1]
1941 THEN MRESA_TAC remark_finite_fan1[`(v:real^3)` ;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1942 THEN DISJ_CASES_TAC(SET_RULE`((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool))={})\/
1943 ~((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) ={})`)
1945 FIND_ASSUM MP_TAC `CARD ((set_of_edge v V E):real^3->bool) > 1`
1946 THEN POP_ASSUM (fun th->REWRITE_TAC[th;CARD_CLAUSES])
1948 SUBGOAL_THEN`~(IMAGE (azim x v u1) ((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) )={})` ASSUME_TAC
1950 REWRITE_TAC[IMAGE_EQ_EMPTY] THEN ASM_MESON_TAC[];
1952 SUBGOAL_THEN` FINITE (IMAGE (azim x v u1) (set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)))` ASSUME_TAC
1953 THENL[ASM_MESON_TAC[FINITE_IMAGE];
1955 REMOVE_THEN "a" (fun th ->MRESAL1_TAC th `(IMAGE (azim x v u1) ((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) ))`[IMAGE;IN_ELIM_THM])
1956 THEN EXISTS_TAC`x':real^3`
1957 THEN ASM_REWRITE_TAC[]
1958 THEN ASM_MESON_TAC[]]]]));;
1962 let exists_element_in_half_sapace_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u1:real^3 w1:real^3.
1963 FAN(x,V,E)/\ v IN V /\ ~coplanar{x,v,u1,w1}
1964 /\ CARD (set_of_edge v V E) >1
1966 ==> ?u:real^3. {v,u} IN E /\ &0< azim x v u1 (u:real^3)/\ azim x v u1 (u:real^3) <pi `,
1968 THEN REPEAT STRIP_TAC
1969 THEN POP_ASSUM MP_TAC
1970 THEN DISCH_THEN(LABEL_TAC "BE")
1971 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`v:real^3`;`u1:real^3`;`w1:real^3`]
1972 THEN MRESA_TAC exists_inf_element_fix_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u1:real^3`]
1973 THEN POP_ASSUM MP_TAC
1974 THEN DISCH_THEN(LABEL_TAC "YEU")
1975 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
1976 THEN POP_ASSUM MP_TAC
1978 THEN MRESA_TAC SUR_SIGMA_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3) `;`(u:real^3)`]
1979 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
1980 THEN DISJ_CASES_TAC(REAL_ARITH`(pi<= azim (x:real^3) (v:real^3) (u1:real^3) u )\/ azim x v u1 (u:real^3) <pi `)
1982 REMOVE_THEN "BE" (fun th-> MRESA_TAC th [`v:real^3`;`w:real^3`])
1983 THEN MP_TAC(REAL_ARITH`pi <= azim (x:real^3) (v:real^3) (u1:real^3) (u:real^3) /\ azim x v w u < pi==> azim x v w u <= azim x v u1 u`)
1985 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`v:real^3`;`u1:real^3`;`w:real^3`;`u:real^3`]
1986 THEN MP_TAC(REAL_ARITH`&0 < azim x v w u /\ azim (x:real^3) (v:real^3) (u1:real^3) (u:real^3) = azim x v u1 w + azim x v w u
1987 ==> azim x v u1 w < azim x v u1 u`)
1988 THEN POP_ASSUM (fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1990 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `w:real^3`)
1991 THEN POP_ASSUM MP_TAC
1992 THEN POP_ASSUM MP_TAC
1993 THEN REAL_ARITH_TAC;
1995 ASSUME_TAC(ISPECL[`(x:real^3)`;`(v:real^3)`;`(u1:real^3)`;`u:real^3`]azim)
1996 THEN MP_TAC(REAL_ARITH`(&0<= azim (x:real^3) (v:real^3) (u1:real^3) u) ==>(azim (x:real^3) (v:real^3) (u1:real^3) u = &0 ) \/ &0< azim x v u1 (u:real^3) `)
1997 THEN POP_ASSUM (fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[])
2000 EXISTS_TAC`sigma_fan x V E v (u:real^3)`
2001 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {u:real^3})\/ ~(set_of_edge v V E = {u})`)
2004 MRESA_TAC CARD_SING[`u:real^3`; `(set_of_edge v V E):real^3->bool`]
2005 THEN FIND_ASSUM MP_TAC `CARD ((set_of_edge v V E):real^3->bool) >1`
2006 THEN POP_ASSUM MP_TAC
2007 THEN POP_ASSUM (fun TH-> REWRITE_TAC[TH])
2010 MRESA_TAC SIGMA_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3) `;`(u:real^3)`]
2011 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`sigma_fan x V E v (u:real^3)`;`v:real^3`]
2012 THEN POP_ASSUM MP_TAC
2014 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `sigma_fan x V E v (u:real^3)`)
2015 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u1:real^3`;`u:real^3`;`sigma_fan x V E v (u:real^3)`]
2016 THEN REDUCE_ARITH_TAC
2017 THEN REMOVE_THEN "BE" (fun th-> MRESA_TAC th [`v:real^3`;`(u:real^3)`])];
2019 EXISTS_TAC`(u:real^3)`
2020 THEN ASM_REWRITE_TAC[]]]);;
2024 let independent_run_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
2025 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2027 /\ sigma_fan x V E u w = v
2029 ==> independent {v - x, u - x, ((&1 - a) % u + a % w) - x}`,
2033 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2034 THEN REWRITE_TAC[fan80]
2036 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2037 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2038 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a= &0)`)
2040 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2041 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2043 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2044 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2045 THEN POP_ASSUM MP_TAC
2046 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v, u, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2047 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,v:real^3,u:real^3,(&1 - a) % u + a % w:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2048 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2049 THEN REMOVE_ASSUM_TAC
2051 THEN MRESA_TAC NOT_COPLANAR_0_4_IMP_INDEPENDENT[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`]);;
2054 let span_run_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
2055 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2057 /\ sigma_fan x V E u w = v
2059 ==> ?t1:real t2:real t3:real.
2060 u1-x =t1 % (v-x)+t2 % ((&1 - a) % u + a % w - x)+t3 %(u-x)`,
2062 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2063 THEN REWRITE_TAC[fan80]
2065 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2066 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2067 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a= &0)`)
2069 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2070 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2072 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2073 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2074 THEN POP_ASSUM MP_TAC
2075 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v, u, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2076 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,v:real^3,u:real^3,(&1 - a) % u + a % w:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2077 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2078 THEN REMOVE_ASSUM_TAC
2080 THEN MRESA_TAC NOT_COPLANAR_0_4_IMP_INDEPENDENT[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`]
2081 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`;`(vec 0):real^3`]
2082 THEN POP_ASSUM MP_TAC
2083 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={D,A,B,C}`]
2085 THEN POP_ASSUM(fun th-> MP_TAC(th) THEN ASSUME_TAC(th))
2086 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,D}={D,A,B}`]
2088 THEN MRESA_TAC th3[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`]
2089 THEN MRESA_TAC th3[ `((&1 - a) % u + a % w) - x:real^3`;`v - x:real^3`; `u - x:real^3`;]
2090 THEN MP_TAC(ISPECL [`(:real^3)`; `{v - x, u - x, ((&1 - a) % u + a % w) - x:real^3}`] CARD_EQ_DIM) THEN
2091 ASM_SIMP_TAC[ORTHONORMAL_IMP_INDEPENDENT; SUBSET_UNIV] THEN
2092 REWRITE_TAC[DIM_UNIV; DIMINDEX_3; HAS_SIZE; FINITE_INSERT; FINITE_EMPTY] THEN
2093 SIMP_TAC[CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY; IN_INSERT;]
2094 THEN ASM_REWRITE_TAC[NOT_IN_EMPTY; ARITH;SUBSET]
2096 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `u1-x:real^3`[IN_UNIV;SPAN_3;IN_ELIM_THM])
2097 THEN EXISTS_TAC`u':real`
2098 THEN EXISTS_TAC`w':real`
2099 THEN EXISTS_TAC`v':real`
2100 THEN VECTOR_ARITH_TAC);;
2103 let cross_dot_fully_surrounded1_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2104 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2105 /\ sigma_fan x V E u w = v
2108 /\ ~collinear{x,v1,u1}
2109 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2110 /\ &0< azim x v1 v u1
2111 /\ azim x v1 v u1 < pi
2112 ==> &0< ((v1 - x) cross (u1 - x)) dot
2113 ((&1 - a) % u + a % w-x)`,
2116 THEN MRESAL_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `(&1 - a) % u + a % w:real^3`;`u1:real^3`][VECTOR_ARITH`((&1 - a) % u + a % w) - x=(&1 - a) % u + a % w - x`]
2117 THEN POP_ASSUM MATCH_MP_TAC
2118 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2119 THEN REWRITE_TAC[fan80]
2120 THEN DISCH_THEN(LABEL_TAC"yeu em")
2121 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2122 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2124 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2125 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2126 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
2127 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2128 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
2129 THEN FIND_ASSUM MP_TAC `(v1:real^3) IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
2130 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2132 THEN SUBGOAL_THEN`~collinear {x, v1, (&1 - a) % u + a % w:real^3}` ASSUME_TAC
2134 ASM_REWRITE_TAC[collinear1_fan;]
2135 THEN FIND_ASSUM MP_TAC`~((&1 - a) % u + a % w IN aff {x, v:real^3})`
2136 THEN MATCH_MP_TAC MONO_NOT
2137 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
2139 THEN POP_ASSUM MP_TAC
2140 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
2141 u' % x + v' % ((&1 - a) % u + a % w)<=>
2142 (&1-(t1+t2+t3)) % x + (v'-t3) % ((&1 - a) % u + a % w-x) =
2143 (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
2144 THEN REDUCE_VECTOR_TAC
2145 THEN DISJ_CASES_TAC(REAL_ARITH`v' - t3= &0 \/ ~(v' - (t3:real)= &0)`)
2147 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
2148 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
2150 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];
2152 MRESA1_TAC REAL_MUL_LINV `(v'-t3:real)`
2154 THEN MP_TAC(SET_RULE`(v' - t3) % ((&1 - a) % u + a % w - x) = t2 % (v - x:real^3) ==> (inv (v'-t3)) % (v' - t3) % ((&1 - a) % u + a % w - x) = (inv (v'-t3)) % ( t2 % (v - x))`)
2155 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
2156 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
2157 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w - x) = (inv (v' - t3) * t2) % (v - x)<=>
2158 (&1 - a) % u + a % w = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
2160 THEN EXISTS_TAC`&1-(inv (v' - t3) * (t2:real))`
2161 THEN EXISTS_TAC`(inv (v' - t3) * (t2:real))`
2162 THEN ASM_REWRITE_TAC[]
2163 THEN REAL_ARITH_TAC];
2166 THEN POP_ASSUM MP_TAC
2167 THEN DISCH_THEN (LABEL_TAC"A")
2169 THEN REMOVE_THEN "A" MP_TAC
2170 THEN ASM_REWRITE_TAC[]
2171 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v1:real^3`;`v:real^3`;`u1:real^3`;`((&1 - a) % u + a % w):real^3`]
2172 THEN POP_ASSUM MP_TAC
2173 THEN DISCH_THEN (LABEL_TAC"B")
2175 THEN SUBGOAL_THEN`azim x v1 v ((&1 - a) % u + a % w)= pi` ASSUME_TAC
2178 THEN MRESA_TAC th3[`(x:real^3)` ;`v1:real^3`;` (v:real^3)`]
2179 THEN MRESA_TAC AFF_LT_2_1[`x:real^3`;`v1:real^3`;`v:real^3`]
2180 THEN MRESAL_TAC AZIM_EQ_PI_ALT[`x:real^3`;`v1:real^3`;`v:real^3`;`((&1 - a) % u + a % w):real^3`][IN_ELIM_THM]
2181 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[VECTOR_ARITH`A=B+C+D <=> D=A-B-C:real^3`]
2182 THEN MP_TAC(REAL_ARITH`&0<t3==> ~(t3= &0)`)
2184 THEN MRESA1_TAC REAL_MUL_LINV `(t3:real)`
2186 THEN MP_TAC(SET_RULE`t3 % ((&1 - a) % u + a % w) = v1 - t1 % x - t2 % v ==> (inv (t3)) % t3 % ((&1 - a) % u + a % w) = (inv (t3)) % ( v1 - t1 % x - t2 % v:real^3)`)
2187 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
2188 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
2189 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w) = inv t3 % (v1 - t1 % x - t2 % v)
2190 <=> (&1 - a) % u + a % w = (-- inv t3 * t1) % x + (inv t3) % v1 +(-- (inv t3* t2)) % v`]
2192 THEN EXISTS_TAC`(-- inv t3 * t1):real`
2193 THEN EXISTS_TAC`(inv t3):real`
2194 THEN EXISTS_TAC`(-- (inv t3 * t2)):real`
2195 THEN ASM_REWRITE_TAC[REAL_ARITH`--inv t3 * t1 + inv t3 + --(inv t3 * t2)= inv t3 *(t3+ &1-(t1+t2+t3))`;REAL_ARITH`(t3 + &1 - &1)=t3`;REAL_ARITH`--A< &0 <=> &0< A`]
2196 THEN MATCH_MP_TAC REAL_LT_MUL
2197 THEN ASM_REWRITE_TAC[]
2198 THEN MATCH_MP_TAC REAL_LT_INV
2199 THEN ASM_REWRITE_TAC[];
2200 REMOVE_THEN "B" MP_TAC
2201 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
2202 THEN REMOVE_ASSUM_TAC
2203 THEN MP_TAC(REAL_ARITH`azim x v1 v u1 < pi==> azim x v1 v u1 <= pi`)
2205 THEN ASM_REWRITE_TAC[]
2206 THEN FIND_ASSUM MP_TAC`azim x v1 v (u1:real^3) < pi`
2207 THEN FIND_ASSUM MP_TAC`&0< azim x v1 v (u1:real^3) `
2208 THEN REAL_ARITH_TAC]]);;
2216 let exists_cross_dot_fully_surrounded1_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2217 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2218 /\ sigma_fan x V E u w = v
2221 /\ ~collinear{x,v1,u1}
2222 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2223 /\ &0< azim x v1 v u1
2224 /\ azim x v1 v u1 < pi
2225 ==> ?t. &0< t/\ t < &1
2226 /\( !h:real. &0< h/\ h<t
2227 ==> &0< ((v1 - x) cross (u1 - x)) dot (((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x))`,
2230 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
2231 ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
2232 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
2233 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
2234 THEN MRESA_TAC cross_dot_fully_surrounded1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;`u1:real^3`]
2235 THEN DISJ_CASES_TAC(REAL_ARITH`(((v1 - x) cross (u1 - x:real^3)) dot (w - u)<= &0 )\/ (&0<((v1 - x) cross (u1 - x)) dot (w - u))`)
2238 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
2239 THEN REPEAT STRIP_TAC
2240 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
2241 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
2242 THEN MRESAL_TAC REAL_LE_LMUL[`a:real`;`((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`;`&0`][REAL_ARITH`(A:real)* &0= &0`]
2243 THEN MRESAL_TAC REAL_LE_RMUL[`a*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`;`&0`;`h:real`][REAL_ARITH`&0 * (A:real)= &0`]
2244 THEN POP_ASSUM MP_TAC
2245 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2246 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2247 THEN POP_ASSUM MP_TAC
2248 THEN REAL_ARITH_TAC;
2249 MRESA_TAC REAL_LT_MUL[`a:real`;`((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`]
2250 THEN MP_TAC(REAL_ARITH`&0<(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)==> ~( (a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)= &0)`)
2252 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
2253 THEN MRESA1_TAC REAL_LT_INV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
2254 THEN MRESA_TAC REAL_LT_MUL[`inv((a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3))`;`((v1 - x) cross (u1 - x)) dot (va:real^3)`]
2255 THEN EXISTS_TAC `min ((inv(a *(((v1 - x) cross (u1 - x)) dot (w - u)))*(((v1 - x) cross (u1 - x)) dot va)) / &2 ) (&1/ &2)`
2257 THENL[POP_ASSUM MP_TAC
2258 THEN REAL_ARITH_TAC;
2263 THEN MP_TAC(REAL_ARITH` h< min ((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x)) dot va)) / &2) (&1 / &2)
2265 h< ((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x)) dot va)) / &2)`)
2267 THEN MRESA_TAC REAL_LT_LMUL[`(a * (((v1 - x) cross (u1 - x)) dot (w - u:real^3)))`;`h:real`;`((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x:real^3)) dot va)) / &2)`]
2269 THEN ABBREV_TAC`vb=a * (((v1 - x) cross (u1 - x)) dot (w - u))`
2270 THEN REPEAT DISCH_TAC
2271 THEN POP_ASSUM MP_TAC
2272 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * (((v1 - x) cross (u1 - x)) dot va)) / &2=
2273 (vb * inv vb) * (((v1 - x) cross (u1 - x)) dot va)/ &2`]
2274 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2275 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2276 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2277 THEN POP_ASSUM MP_TAC
2278 THEN REAL_ARITH_TAC]]]);;
2281 let cross_dot_fully_surrounded2_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2282 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2283 /\ sigma_fan x V E u w = v
2286 /\ ~collinear{x,v1,u1}
2287 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2288 /\ &0< azim x v1 v u1
2289 /\ azim x v1 v u1 < pi
2290 ==> &0 < (((&1 - a) % u + a % w - x) cross (v - x)) dot (u1 - x)`,
2293 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2294 THEN REWRITE_TAC[fan80]
2295 THEN DISCH_THEN(LABEL_TAC"yeu em")
2296 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2297 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2299 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2300 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2301 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
2302 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2303 THEN MRESA1_TAC SIN_POS_PI`azim x v1 v (u1:real^3)`
2304 THEN POP_ASSUM MP_TAC
2305 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`v1:real^3`;` v:real^3`;`u1:real^3`]
2306 THEN POP_ASSUM MP_TAC
2307 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
2309 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2310 THEN MRESA_TAC JBDNJJB[`(v1-x):real^3`;`v-x:real^3`;`u1-x:real^3`]
2311 THEN POP_ASSUM MP_TAC
2312 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
2313 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
2315 THEN MRESAL_TAC REAL_LT_LMUL_EQ [` &0:real `;`(((v1 - x) cross (v - x)) dot ((u1 - x):real^3)):real`;`t:real`][REAL_ARITH`a * &0 = &0`]
2316 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2317 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
2318 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
2319 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2321 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;VECTOR_ARITH`A- vec 0= A`;VECTOR_ARITH`(t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w)) - x=(t1- &1) % x + t2 % v + t3 % ((&1 - a) % u + a % w)`])
2322 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
2323 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
2325 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(--t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w)= t2 % (v-x) + t3 % ((&1 - a) % u + a % w-x)`]
2326 THEN REWRITE_TAC[CROSS_LADD; CROSS_RADD; CROSS_LMUL; CROSS_RMUL;CROSS_REFL;CROSS_RNEG;CROSS_LNEG]
2327 THEN REDUCE_VECTOR_TAC
2328 THEN REWRITE_TAC[GSYM CROSS_LMUL;GSYM CROSS_LADD;DOT_LMUL]
2329 THEN MRESAL_TAC REAL_LT_LMUL_EQ [` &0:real `;`((((&1 - a) % u + a % w - x) cross (v - x)) dot (u1 - x)):real`;`t3:real`][REAL_ARITH`a * &0 = &0`]);;
2333 let exists_cross_dot_fully_surrounded2_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2334 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2335 /\ sigma_fan x V E u w = v
2338 /\ ~collinear{x,v1,u1}
2339 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2340 /\ &0< azim x v1 v u1
2341 /\ azim x v1 v u1 < pi
2343 ?t:real. &0< t/\ t < &1
2344 /\ (!h:real. &0<h /\ h< t
2346 ((((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x) cross (v - x)) dot (u1 - x))`,
2349 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
2350 ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
2351 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
2352 THEN REWRITE_TAC[CROSS_LADD;CROSS_LMUL;DOT_LADD;DOT_LMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
2353 THEN MRESA_TAC cross_dot_fully_surrounded2_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;`u1:real^3`]
2354 THEN DISJ_CASES_TAC(REAL_ARITH`(((w - u) cross (v - x:real^3)) dot (u1- x)<= &0 )\/ (&0<((w - u) cross (v - x:real^3)) dot (u1- x))`)
2357 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
2358 THEN REPEAT STRIP_TAC
2359 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
2360 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
2361 THEN MRESAL_TAC REAL_LE_LMUL[`a:real`;`((w - u) cross (v - x:real^3)) dot (u1- x:real^3)`;`&0`][REAL_ARITH`(A:real)* &0= &0`]
2362 THEN MRESAL_TAC REAL_LE_RMUL[`a*(((w - u) cross (v - x:real^3)) dot (u1- x))`;`&0`;`h:real`][REAL_ARITH`&0 * (A:real)= &0`]
2363 THEN POP_ASSUM MP_TAC
2364 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2365 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2366 THEN POP_ASSUM MP_TAC
2367 THEN REAL_ARITH_TAC;
2368 MRESA_TAC REAL_LT_MUL[`a:real`;`((w - u) cross (v - x:real^3)) dot (u1- x:real^3)`]
2369 THEN MP_TAC(REAL_ARITH`&0<(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))==> ~( (a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))= &0)`)
2371 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
2372 THEN MRESA1_TAC REAL_LT_INV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
2373 THEN MRESA_TAC REAL_LT_MUL[`inv((a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x)))`;`((va cross (v - x)) dot (u1 - x))`]
2374 THEN EXISTS_TAC `min ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 ) (&1/ &2)`
2376 THENL[POP_ASSUM MP_TAC
2377 THEN REAL_ARITH_TAC;
2382 THEN MP_TAC(REAL_ARITH` h< min ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 ) (&1/ &2)
2384 h< ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 )`)
2386 THEN MRESA_TAC REAL_LT_LMUL[`(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))`;`h:real`;`((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 )`]
2388 THEN ABBREV_TAC`vb=a * (((w - u) cross (v - x:real^3)) dot (u1- x))`
2389 THEN REPEAT DISCH_TAC
2390 THEN POP_ASSUM MP_TAC
2391 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * ((va cross (v - x)) dot (u1 - x))) / &2=
2392 (vb * inv vb) * ((va cross (v - x)) dot (u1 - x))/ &2`]
2393 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2394 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2395 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2396 THEN POP_ASSUM MP_TAC
2397 THEN REAL_ARITH_TAC]]]);;
2400 let lie_in_half_space_and_azim=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2401 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2402 /\ sigma_fan x V E u w = v
2405 /\ ~collinear{x,v1,u1}
2406 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2407 /\ &0< azim x v1 v u1
2408 /\ azim x v1 v u1 < pi
2409 ==> &0 < ((v-x) cross (u - x)) dot (v1-x)`,
2412 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2413 THEN REWRITE_TAC[fan80]
2414 THEN DISCH_THEN(LABEL_TAC"yeu em")
2415 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2416 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2418 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2419 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2420 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2421 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
2422 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
2423 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2425 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A- vec 0= A`;VECTOR_ARITH`(t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w)) - x=(t1- &1) % x + t2 % v + t3 % ((&1 - a) % u + a % w)`]
2426 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
2427 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
2429 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(--t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w)= t2 % (v-x) + t3 % ((&1 - a) % (u-x) + a % (w-x))`]
2430 THEN REWRITE_TAC[ DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
2431 THEN REDUCE_ARITH_TAC
2432 THEN MATCH_MP_TAC REAL_LT_MUL
2433 THEN ASM_REWRITE_TAC[]
2434 THEN MATCH_MP_TAC REAL_LT_MUL
2435 THEN ASM_REWRITE_TAC[]
2436 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
2437 THEN POP_ASSUM MP_TAC
2438 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2439 THEN ASM_REWRITE_TAC[CROSS_TRIPLE]);;
2447 let exists_cut_small_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2448 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2449 /\ sigma_fan x V E u w = v
2452 /\ ~collinear{x,v1,u1}
2453 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2454 /\ &0< azim x v1 v u1
2455 /\ azim x v1 v u1 < pi
2457 ?t:real. &0< t/\ t < &1
2458 /\ ~(aff_gt {x} {v,(&1-t)%((&1-a)%u+ a%w)+t%u} INTER aff_gt {x} {v1,u1}={})`,
2461 THEN MRESA_TAC lie_in_half_space_and_azim[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;` u1:real^3`]
2462 THEN MRESA_TAC exists_cross_dot_fully_surrounded1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;` u1:real^3`]
2463 THEN POP_ASSUM MP_TAC
2464 THEN DISCH_THEN (LABEL_TAC"MA")
2465 THEN MRESA_TAC exists_cross_dot_fully_surrounded2_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;` u1:real^3`]
2466 THEN POP_ASSUM MP_TAC
2467 THEN DISCH_THEN (LABEL_TAC"BE NHO")
2468 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2469 THEN REWRITE_TAC[fan80]
2470 THEN DISCH_THEN(LABEL_TAC"yeu em")
2471 THEN ABBREV_TAC`ta=min (t:real) (t':real)/ &2`
2472 THEN EXISTS_TAC `(ta:real)`
2473 THEN SUBGOAL_THEN `&0< ta:real /\ ta < &1 /\ ta< t /\ ta< t'` ASSUME_TAC
2475 POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2476 THEN FIND_ASSUM MP_TAC`&0<t:real`
2477 THEN FIND_ASSUM MP_TAC`t:real < &1`
2478 THEN FIND_ASSUM MP_TAC`&0<t':real`
2479 THEN FIND_ASSUM MP_TAC`t':real < &1`
2480 THEN REAL_ARITH_TAC;(*1*)
2483 THEN MP_TAC(REAL_ARITH`ta< &1 ==> &0< (&1-ta):real`)
2485 THEN MRESA_TAC REAL_LT_MUL [`(&1-ta):real`;`a:real`]
2486 THEN MRESA_TAC REAL_LT_LMUL [`(&1-ta):real`;`a:real`;`&1`]
2487 THEN MP_TAC(REAL_ARITH` &0< ta /\ (&1-ta)*a< (&1-ta)* &1 :real==> (&1-ta)*a< &1`)
2489 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2490 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2492 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2493 THEN MRESAL_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`((&1-ta)*a):real`][VECTOR_ARITH`(&1 - ((&1 - ta) * a)) % u + ((&1 - ta) * a ) % w=
2494 (&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`]
2495 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2496 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
2497 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`;`u1:real^3`;`v:real^3`]
2498 THEN POP_ASSUM MP_TAC
2499 THEN DISCH_THEN (LABEL_TAC"CON")
2500 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`;]
2501 THEN MRESA_TAC th3[`(x:real^3)` ;` (v1:real^3)`;`u1:real^3`;]
2502 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2503 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v1:real^3)`;`(u1:real^3) `;]
2504 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3 `;]
2505 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;EXTENSION;EMPTY;IN;NOT_FORALL_THM]
2506 THEN ABBREV_TAC`a1=(v-x):real^3`
2507 THEN ABBREV_TAC`a2=(((&1-ta)%((&1-a)%u+ a%w)+ta%u)-x):real^3`
2508 THEN ABBREV_TAC`a3=(v1-x) :real^3`
2509 THEN ABBREV_TAC`a4=u1-x:real^3`
2510 THEN ABBREV_TAC`va=a1 cross a2:real^3`
2511 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
2512 THEN EXISTS_TAC`(vb:real^3) cross (va:real^3)+(x:real^3)`
2515 EXISTS_TAC`&1-(vb:real^3) dot (a2:real^3)+ vb dot (a1:real^3)`
2516 THEN EXISTS_TAC`(vb:real^3) dot (a2:real^3)`
2517 THEN EXISTS_TAC`--((vb:real^3) dot (a1:real^3))`
2518 THEN REMOVE_THEN "MA"(fun th-> MRESA1_TAC th `ta:real`)
2519 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - vb dot a2 + vb dot a1) + vb dot a2 + --(vb dot a1) = &1`]
2520 THEN SUBGOAL_THEN `&0< --((vb:real^3) dot (a1:real^3))` ASSUME_TAC
2521 THENL(*3*)[EXPAND_TAC"vb"
2522 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
2523 THEN REWRITE_TAC[DOT_LNEG]
2524 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
2525 THEN REMOVE_THEN "CON"MP_TAC
2526 THEN REAL_ARITH_TAC;(*3*)
2530 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_MUL_LNEG]
2533 THEN VECTOR_ARITH_TAC];(*2*)
2535 ONCE_REWRITE_TAC[CROSS_SKEW]
2537 THEN REWRITE_TAC[CROSS_LAGRANGE;]
2538 THEN EXISTS_TAC`&1+(va:real^3) dot (a4:real^3)- va dot (a3:real^3)`
2539 THEN EXISTS_TAC`--(va:real^3) dot (a4:real^3)`
2540 THEN EXISTS_TAC`((va:real^3) dot (a3:real^3))`
2541 THEN REMOVE_THEN "BE NHO"(fun th-> MRESA1_TAC th `ta:real`)
2542 THEN ASM_REWRITE_TAC[DOT_LNEG;VECTOR_MUL_LNEG;REAL_ARITH`(&1 + va dot a4 - va dot a3) + --(va dot a4) + va dot a3 = &1`;]
2547 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
2548 THEN REWRITE_TAC[DOT_LNEG]
2549 THEN POP_ASSUM MP_TAC
2550 THEN REAL_ARITH_TAC;(*3*)
2556 THEN REWRITE_TAC[VECTOR_ARITH`((&1 - ta) % ((&1 - a) % u + a % w) + ta % u) - x
2557 =(&1 - ta) % ((&1 - a) % u + a % w-x) + ta % (u - x)`]
2558 THEN ABBREV_TAC`vu=(&1 - a) % u + a % w - x:real^3`
2559 THEN REWRITE_TAC[CROSS_RADD;CROSS_RMUL;DOT_LADD;DOT_LMUL;]
2560 THEN MRESAL_TAC coplanar_is_cross_fan[`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`;`v1:real^3`]
2561 [VECTOR_ARITH`((&1 - a) % u + a % w) - x=(&1 - a) % u + a % w - x`]
2562 THEN REDUCE_ARITH_TAC
2563 THEN MATCH_MP_TAC REAL_LT_MUL
2564 THEN ASM_REWRITE_TAC[];(*4*)
2567 THEN REWRITE_TAC[VECTOR_ARITH`-- A+B= B-A:real^3`;VECTOR_ARITH`(&1+A-B)%X+B%U-A%V=X-A%(V-X)+B%(U-X)`]
2568 THEN VECTOR_ARITH_TAC]]]]);;
2574 let not_cut_inside_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
2575 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
2576 /\ sigma_fan x V E u w = v
2578 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
2581 /\ (!h:real. &0<h /\ h< a
2582 ==> aff_gt{x} {v,(&1-h)%u+ h % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
2583 ==> aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={}`,
2586 THEN POP_ASSUM MP_TAC
2587 THEN POP_ASSUM MP_TAC
2588 THEN POP_ASSUM MP_TAC
2589 THEN DISCH_THEN(LABEL_TAC"EM")
2591 THEN POP_ASSUM (fun th-> MP_TAC (th) THEN ASSUME_TAC(th))
2592 THEN REWRITE_TAC[fan80]
2593 THEN DISCH_THEN(LABEL_TAC"BE")
2594 THEN DISCH_THEN(LABEL_TAC"YEU")
2595 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM]
2600 THEN POP_ASSUM MP_TAC
2601 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
2602 THEN POP_ASSUM MP_TAC
2603 THEN POP_ASSUM MP_TAC
2604 THEN DISCH_THEN(LABEL_TAC"A")
2606 THEN REMOVE_THEN "A" MP_TAC
2607 THEN POP_ASSUM(fun th->REWRITE_TAC[(th)])
2608 THEN POP_ASSUM MP_TAC
2609 THEN DISCH_THEN(LABEL_TAC"A")
2611 THEN REMOVE_THEN "A" MP_TAC
2612 THEN REMOVE_THEN "BE" (fun th-> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"BE") )
2613 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2614 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2615 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2617 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
2619 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
2620 THEN POP_ASSUM MP_TAC
2621 THEN DISCH_THEN(LABEL_TAC "VUT1")
2622 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
2623 THEN POP_ASSUM MP_TAC
2624 THEN DISCH_THEN(LABEL_TAC "VUT")
2625 THEN REPEAT STRIP_TAC
2626 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2627 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2628 THEN DISCH_THEN(LABEL_TAC "VUT1")
2629 THEN DISCH_TAC THEN DISCH_TAC
2630 THEN DISJ_CASES_TAC(REAL_ARITH`(t3'= &0) \/ ~(t3':real= &0)`)
2633 THEN REDUCE_ARITH_TAC
2634 THEN REDUCE_VECTOR_TAC
2635 THEN DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
2638 THEN REDUCE_ARITH_TAC
2639 THEN REDUCE_VECTOR_TAC
2641 THEN ASM_REWRITE_TAC[]
2642 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
2644 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
2646 THEN ASM_REWRITE_TAC[]
2647 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM(th)])`t1 + t2 + t3 = &1:real`
2648 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % (((t1 + t2 + t3) - a) % u + a % w) =
2649 (t1 + t2 + t3) % x<=>(t3) % (((t1 + t2 + t3) - a) % u + a % w- x)=(-- t2) % (v-x) `]
2650 THEN ASM_REWRITE_TAC[IN;EMPTY]
2652 THEN MP_TAC(SET_RULE`
2653 (t3) % ((&1 - a) % u + a % w- x)=(-- t2) % (v-x)
2654 ==> (inv (t3))%((t3) % ((&1 - a) % u + a % w- x) ) = (inv (t3))%((-- t2) % (v-x)):real^3`)
2655 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2656 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;]
2657 THEN REDUCE_VECTOR_TAC
2658 THEN REWRITE_TAC[VECTOR_ARITH`E+A-B=C%(D-B)<=>E+A=(&1-C)%B+C%D`;]
2660 THEN FIND_ASSUM MP_TAC `~((&1 - a) % u + a % w IN aff {x, v:real^3})`
2661 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
2662 THEN EXISTS_TAC`&1-(inv t3 * (--t2)):real`
2663 THEN EXISTS_TAC`(inv t3 * (--t2)):real`
2664 THEN ASM_REWRITE_TAC[]
2665 THEN REAL_ARITH_TAC;(*3*)
2667 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
2668 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
2669 THEN DISCH_THEN(LABEL_TAC"MAI")
2670 THEN DISCH_THEN (LABEL_TAC"YEU EM")
2671 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
2672 (&1 - t2') % x + t2' % v'<=> t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3 `]
2673 THEN MP_TAC(ISPEC`(t2':real)`REAL_MUL_LINV)
2676 THEN MP_TAC(SET_RULE`
2677 t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3
2678 ==> (inv (t2'))%(t2' % v' ) = (inv (t2'))%((t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3)
2680 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2681 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C+D)=(A%B+A%C+A%D)`;REAL_ARITH`a*(b-c-d)=a*b-a*c-a*d`]
2682 THEN REDUCE_VECTOR_TAC
2684 THEN SUBGOAL_THEN `~coplanar{x:real^3,v':real^3,v:real^3,u:real^3}` ASSUME_TAC
2688 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v', v, u}= {(--x) +x, (--x) +v', (--x) +v, (--x) +u}`)
2689 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,v':real^3,v:real^3,u:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2690 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
2692 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
2693 (inv t2' * t2) % v +
2694 (inv t2' * t3) % ((&1 - a) % u + a % w)) -
2695 x=(inv t2' * t2) % (v-x) +
2696 (inv t2' * t3) % ((&1 - a) % u + a % w-x)`])
2697 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==> &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
2698 THEN REMOVE_THEN"MAI" MP_TAC
2700 THEN REMOVE_ASSUM_TAC
2702 THEN POP_ASSUM MP_TAC
2703 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
2705 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
2708 THEN MP_TAC(SET_RULE`
2709 t2 + t3 = &1 - t1:real
2710 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
2712 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2713 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
2715 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
2717 THEN MP_TAC(REAL_ARITH` &0 < a==> ~(a = &0) `)
2719 THEN MRESA_TAC REAL_LT_MUL[`t2':real`;`inv (&1- t1):real`]
2720 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
2721 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
2722 THEN MP_TAC(REAL_ARITH`&0< (t2') * inv (&1- t1) ==> ~((t2')* inv(&1- t1)= &0)`)
2724 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
2725 THEN MRESA_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`(t2')* inv(&1- t1)`;`u - x:real^3`; `v - x:real^3`; `(inv t2' * t2) % (v - x) +(inv t2' * t3) % ((&1 - a) % u + a % w - x):real^3`]
2726 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
2727 THEN REDUCE_VECTOR_TAC
2728 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+E%(C+D))=A%B+(A*E)%(C+D)`;
2729 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
2730 THEN REDUCE_ARITH_TAC
2731 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2733 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2734 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2735 THEN POP_ASSUM MP_TAC
2736 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2737 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2738 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2739 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
2740 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2742 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
2743 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
2744 THEN POP_ASSUM MP_TAC
2745 THEN REWRITE_TAC[VECTOR_ARITH`
2746 (&1 - inv (&1 - t1) * t3) % (v - x) +
2747 (inv (&1 - t1) * t3) % (((&1 - a) % u + a % w) - x)=
2748 (&1 - inv (&1 - t1) * t3) % (v - x) +
2749 (inv (&1 - t1) * t3) % ((&1 - a) % u + a % w - x)`];(*4*)
2752 THEN POP_ASSUM MP_TAC
2753 THEN DISCH_THEN (LABEL_TAC"DICH")
2755 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
2756 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
2758 THEN MP_TAC(REAL_ARITH` &0 < a==> ~(a = &0) `)
2760 THEN MRESA1_TAC REAL_LT_INV`t2':real`
2761 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
2762 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
2763 THEN SUBGOAL_THEN `(v':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
2766 ASM_REWRITE_TAC[IN_ELIM_THM]
2767 THEN EXISTS_TAC`(&1 - inv t2' * t2 - inv t2' * t3:real)`
2768 THEN EXISTS_TAC`inv t2' * t2:real`
2769 THEN EXISTS_TAC`(inv t2' * t3:real)`
2770 THEN ASM_REWRITE_TAC[]
2771 THEN REAL_ARITH_TAC;(*5*)
2773 REMOVE_THEN "DICH" MP_TAC
2774 THEN REMOVE_THEN "VUT" MP_TAC
2776 THEN REMOVE_ASSUM_TAC
2777 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
2778 THEN MRESA_TAC exists_element_in_half_sapace_fan
2779 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;` v:real^3`;`u:real^3`]
2780 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
2782 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v':real^3`;`u':real^3`]
2784 THEN REMOVE_ASSUM_TAC
2785 THEN REWRITE_TAC[EMPTY;IN]
2786 THEN POP_ASSUM MP_TAC
2787 THEN ASM_REWRITE_TAC[]
2788 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
2790 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
2791 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
2792 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
2793 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
2794 THEN POP_ASSUM MP_TAC
2795 THEN POP_ASSUM MP_TAC
2796 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
2797 THEN SET_TAC[]](*5*)](*4*)](*3*);(*2*)
2801 DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
2804 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
2805 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
2806 THEN DISCH_THEN(LABEL_TAC"MAI")
2807 THEN DISCH_THEN (LABEL_TAC"YEU EM")
2808 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
2809 (&1 - &0 - t3') % x + &0% v'+t3' % w'<=> t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3 `]
2810 THEN MP_TAC(ISPEC`(t3':real)`REAL_MUL_LINV)
2813 THEN MP_TAC(SET_RULE`
2814 t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3
2815 ==> (inv (t3'))%(t3' % w' ) = (inv (t3'))%((t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3)
2817 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2818 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C+D)=(A%B+A%C+A%D)`;REAL_ARITH`a*(b-c-d)=a*b-a*c-a*d`]
2819 THEN REDUCE_VECTOR_TAC
2821 THEN SUBGOAL_THEN `~coplanar{x:real^3,w':real^3,v:real^3,u:real^3}` ASSUME_TAC
2825 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, w', v, u}= {(--x) +x, (--x) +w', (--x) +v, (--x) +u}`)
2826 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,w':real^3,v:real^3,u:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2827 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
2829 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
2830 (inv t2' * t2) % v +
2831 (inv t2' * t3) % ((&1 - a) % u + a % w)) -
2832 x=(inv t2' * t2) % (v-x) +
2833 (inv t2' * t3) % ((&1 - a) % u + a % w-x)`])
2834 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==> &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
2835 THEN REMOVE_THEN"MAI" MP_TAC
2837 THEN REMOVE_ASSUM_TAC
2839 THEN POP_ASSUM MP_TAC
2840 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
2842 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
2845 THEN MP_TAC(SET_RULE`
2846 t2 + t3 = &1 - t1:real
2847 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
2849 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2850 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
2852 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
2854 THEN MP_TAC(REAL_ARITH` &0 < a==> ~(a = &0) `)
2856 THEN MRESA_TAC REAL_LT_MUL[`t3':real`;`inv (&1- t1):real`]
2857 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
2858 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
2859 THEN MP_TAC(REAL_ARITH`&0< (t3') * inv (&1- t1) ==> ~((t3')* inv(&1- t1)= &0)`)
2861 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
2862 THEN MRESA_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`(t3')* inv(&1- t1)`;`u - x:real^3`; `v - x:real^3`; `(inv t3' * t2) % (v - x) +(inv t3' * t3) % ((&1 - a) % u + a % w - x):real^3`]
2863 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
2864 THEN REDUCE_VECTOR_TAC
2865 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+E%(C+D))=A%B+(A*E)%(C+D)`;
2866 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
2867 THEN REDUCE_ARITH_TAC
2868 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2870 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2871 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2872 THEN POP_ASSUM MP_TAC
2873 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2874 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2875 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2876 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
2877 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2879 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
2880 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
2881 THEN POP_ASSUM MP_TAC
2882 THEN REWRITE_TAC[VECTOR_ARITH`
2883 (&1 - inv (&1 - t1) * t3) % (v - x) +
2884 (inv (&1 - t1) * t3) % (((&1 - a) % u + a % w) - x)=
2885 (&1 - inv (&1 - t1) * t3) % (v - x) +
2886 (inv (&1 - t1) * t3) % ((&1 - a) % u + a % w - x)`];(*4*)
2890 THEN POP_ASSUM MP_TAC
2891 THEN DISCH_THEN (LABEL_TAC"DICH")
2893 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
2894 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
2896 THEN MP_TAC(REAL_ARITH` &0 < a==> ~(a = &0) `)
2898 THEN MRESA1_TAC REAL_LT_INV`t3':real`
2899 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
2900 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
2901 THEN SUBGOAL_THEN `(w':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
2904 ASM_REWRITE_TAC[IN_ELIM_THM]
2905 THEN EXISTS_TAC`(&1 - inv t3' * t2 - inv t3' * t3:real)`
2906 THEN EXISTS_TAC`inv t3' * t2:real`
2907 THEN EXISTS_TAC`(inv t3' * t3:real)`
2908 THEN ASM_REWRITE_TAC[]
2909 THEN REAL_ARITH_TAC;(*5*)
2911 REMOVE_THEN "DICH" MP_TAC
2912 THEN REMOVE_THEN "VUT" MP_TAC
2914 THEN REMOVE_ASSUM_TAC
2915 THEN FIND_ASSUM MP_TAC`{v',w':real^3} IN E`
2916 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2918 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
2920 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
2921 THEN MRESA_TAC exists_element_in_half_sapace_fan
2922 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;` v:real^3`;`u:real^3`]
2923 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
2925 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`w':real^3`;`u':real^3`]
2927 THEN REMOVE_ASSUM_TAC
2928 THEN REWRITE_TAC[EMPTY;IN]
2929 THEN POP_ASSUM MP_TAC
2930 THEN ASM_REWRITE_TAC[]
2931 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
2933 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
2934 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
2935 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
2936 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
2937 THEN POP_ASSUM MP_TAC
2938 THEN POP_ASSUM MP_TAC
2939 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
2940 THEN SET_TAC[]](*5*)](*4*);(*3*)
2944 THEN DISCH_TAC THEN DISCH_THEN(LABEL_TAC"BO")
2945 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
2946 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
2948 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
2950 THEN MP_TAC(REAL_ARITH` &0 < a==> ~(a = &0) `)
2952 THEN MRESA1_TAC REAL_LT_INV`t2':real`
2953 THEN MRESA1_TAC REAL_MUL_LINV`t2':real`
2954 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
2955 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
2956 THEN MRESA1_TAC REAL_LT_INV`t3':real`
2957 THEN MRESA1_TAC REAL_MUL_LINV`t3':real`
2958 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
2959 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
2960 THEN SUBGOAL_THEN`(x':real^3) IN aff_gt {x} {v',w'}` ASSUME_TAC
2963 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
2964 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2965 THEN EXISTS_TAC`t1':real`
2966 THEN EXISTS_TAC`t2':real`
2967 THEN EXISTS_TAC`t3':real`
2968 THEN ASM_REWRITE_TAC[];(*4*)
2970 SUBGOAL_THEN`(x':real^3) IN aff_ge {x} {v',w'}` ASSUME_TAC
2973 ASM_REWRITE_TAC[IN_ELIM_THM]
2974 THEN EXISTS_TAC`t1':real`
2975 THEN EXISTS_TAC`t2':real`
2976 THEN EXISTS_TAC`t3':real`
2977 THEN ASM_REWRITE_TAC[];(*5*)
2979 SUBGOAL_THEN `(x':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
2982 ASM_REWRITE_TAC[IN_ELIM_THM]
2983 THEN EXISTS_TAC`t1:real`
2984 THEN EXISTS_TAC`t2:real`
2985 THEN EXISTS_TAC`t3:real`
2986 THEN ASM_REWRITE_TAC[]
2987 THEN REAL_ARITH_TAC;(*6*)
2989 SUBGOAL_THEN `(x':real^3) IN aff_ge {x} {v,va:real^3}` ASSUME_TAC
2992 MRESA_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`va:real^3`]
2993 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2994 THEN EXISTS_TAC`t1:real`
2995 THEN EXISTS_TAC`t2:real`
2996 THEN EXISTS_TAC`t3:real`
2997 THEN MP_TAC(REAL_ARITH`&0< t2==> &0 <= t2`) THEN RESA_TAC
2998 THEN MP_TAC(REAL_ARITH`&0< t3==> &0 <= t3`) THEN RESA_TAC
2999 THEN ASM_REWRITE_TAC[];(*7*)
3001 FIND_ASSUM MP_TAC`{v',w':real^3} IN E`
3002 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3004 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
3006 THEN SUBGOAL_THEN `~collinear {x, x', w':real^3}` ASSUME_TAC
3009 ASM_REWRITE_TAC[collinear1_fan;]
3010 THEN FIND_ASSUM MP_TAC `~((v':real^3) IN aff{x,w'})`
3011 THEN MATCH_MP_TAC MONO_NOT
3012 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
3014 THEN POP_ASSUM MP_TAC
3015 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % w'
3016 <=> t2' % v' = (u'-t1') % x + (v''-t3') % w'`]
3018 THEN MP_TAC(SET_RULE`
3019 t2' % v' = (u'-t1') % x + (v''-t3') % w':real^3
3020 ==> (inv ( t2'))%(t2' % v') = (inv (t2'))%((u'-t1') % x + (v''-t3') % w')
3022 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3023 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3024 THEN REDUCE_VECTOR_TAC
3026 THEN EXISTS_TAC `(inv t2' * (u' - t1':real))`
3027 THEN EXISTS_TAC `(inv t2' * (v'' - t3':real))`
3028 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t2' * (u' - t1') + inv t2' * (v'' - t3')=inv t2'* (t2'+ (u'+v'') - (t1'+t2'+t3'))`;REAL_ARITH`t2'+ &1 - &1=t2'`];(*8*)
3033 SUBGOAL_THEN `~collinear {x, x', v':real^3}` ASSUME_TAC
3035 ASM_REWRITE_TAC[collinear1_fan;]
3036 THEN FIND_ASSUM MP_TAC `~((w':real^3) IN aff{x,v'})`
3037 THEN MATCH_MP_TAC MONO_NOT
3038 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
3040 THEN POP_ASSUM MP_TAC
3041 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
3042 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
3044 THEN MP_TAC(SET_RULE`
3045 t3' % w' = (u'-t1') % x + (v''-t2') % v':real^3
3046 ==> (inv ( t3'))%(t3' % w') = (inv (t3'))%((u'-t1') % x + (v''-t2') % v')
3048 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3049 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3050 THEN REDUCE_VECTOR_TAC
3052 THEN EXISTS_TAC `(inv t3' * (u' - t1':real))`
3053 THEN EXISTS_TAC `(inv t3' * (v'' - t2':real))`
3054 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3' * (u' - t1') + inv t3' * (v'' - t2')=inv t3'* (t3'+ (u'+v'') - (t1'+t2'+t3'))`;REAL_ARITH`t3'+ &1 - &1=t3'`];(*9*)
3059 SUBGOAL_THEN`~collinear {x, x', va:real^3}` ASSUME_TAC
3061 REMOVE_THEN "BO" MP_TAC
3062 THEN DISCH_TAC THEN REMOVE_ASSUM_TAC
3063 THEN ASM_REWRITE_TAC[collinear1_fan;]
3064 THEN FIND_ASSUM MP_TAC`~(va IN aff {x, v:real^3})`
3065 THEN MATCH_MP_TAC MONO_NOT
3066 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3068 THEN POP_ASSUM MP_TAC
3069 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % (va) =
3070 u' % x + v' % (va)<=>
3071 (&1-(t1+t2+t3)) % x + (v'-t3) % (va-x) =
3072 (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
3073 THEN REDUCE_VECTOR_TAC
3074 THEN DISJ_CASES_TAC(REAL_ARITH`(v'' - t3 = &0) \/ ~(v'' - (t3:real)= &0)`)
3077 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
3078 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
3080 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];(*11*)
3082 MRESA1_TAC REAL_MUL_LINV `(v''-t3:real)`
3084 THEN MP_TAC(SET_RULE`(v'' - t3) % (va- x) = t2 % (v - x:real^3) ==> (inv (v'' -t3)) % ((v'' - t3) % (va - x)) = (inv (v'' -t3)) % ( t2 % (v - x))`)
3085 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
3086 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
3087 THEN REWRITE_TAC[VECTOR_ARITH`&1 % (va - x) = (inv (v' - t3) * t2) % (v - x)<=>
3088 va = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
3090 THEN EXISTS_TAC`&1-(inv (v'' - t3) * (t2:real))`
3091 THEN EXISTS_TAC`(inv (v'' - t3) * (t2:real))`
3092 THEN ASM_REWRITE_TAC[]
3093 THEN REAL_ARITH_TAC](*11*);(*10*)
3096 SUBGOAL_THEN `~collinear {x, x', v:real^3}` ASSUME_TAC
3098 REMOVE_THEN "BO" MP_TAC
3100 THEN REMOVE_ASSUM_TAC
3101 THEN ASM_REWRITE_TAC[collinear1_fan]
3102 THEN FIND_ASSUM MP_TAC `~(va IN aff {x, v:real^3})`
3103 THEN MATCH_MP_TAC MONO_NOT
3104 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
3106 THEN POP_ASSUM MP_TAC
3107 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
3108 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
3109 THEN MP_TAC(REAL_ARITH`&0< t3 ==> ~(t3= &0)`)
3111 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
3113 THEN MP_TAC(SET_RULE`
3114 t3 % va = (u'-t1) % x + (v''-t2) % v:real^3
3115 ==> (inv ( t3))%(t3 % va) = (inv (t3))%((u'-t1) % x + (v''-t2) % v)
3117 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3118 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3119 THEN REDUCE_VECTOR_TAC
3121 THEN EXISTS_TAC `(inv t3 * (u' - t1:real))`
3122 THEN EXISTS_TAC `(inv t3 * (v'' - t2:real))`
3123 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3' * (u' - t1') + inv t3' * (v'' - t2')=inv t3'* (t3'+ (u'+v'') - (t1'+t2'+t3'))`;REAL_ARITH`t3'+ &1 - &1=t3'`];(*11*)
3125 ABBREV_TAC`an=t1' % x + t2' % v' + t3' % w':real^3`
3126 THEN REMOVE_THEN "VUT1" MP_TAC
3127 THEN REMOVE_THEN "VUT1" MP_TAC
3128 THEN REMOVE_THEN "BO" MP_TAC
3129 THEN REMOVE_THEN "VUT" MP_TAC
3130 THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC
3131 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3132 THEN DISJ_CASES_TAC(SET_RULE`(&0 < azim x (x':real^3) v w' /\
3133 azim x (x') v w' < pi)\/ ~(&0 < azim x (x') v w' /\
3134 azim x (x') v w' < pi)`)
3138 MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`x':real^3`;`w':real^3`]
3139 THEN REWRITE_TAC[EMPTY;IN]
3140 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3142 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3143 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3144 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3145 THEN MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
3146 THEN POP_ASSUM MP_TAC
3147 THEN POP_ASSUM MP_TAC
3148 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3149 THEN POP_ASSUM MP_TAC
3150 THEN FIND_ASSUM MP_TAC`{v',w'} IN (E:(real^3->bool)->bool)`
3151 THEN SET_TAC[];(*12*)
3153 ASSUME_TAC(ISPECL[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]azim)
3154 THEN ASSUME_TAC(PI_WORKS)
3155 THEN MP_TAC(REAL_ARITH`~(&0 < azim x x' v w' /\ azim x x' v w' < pi)/\
3156 &0 <= azim x x' v w' /\ &0< pi==> pi< azim x x' v w' \/(azim x x' v w'= &0 \/ azim x x' v w'=pi) `)
3157 THEN ASM_REWRITE_TAC[]
3159 THENL(*13*)(*3SUBGOAL*)[
3162 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
3163 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
3165 THEN MP_TAC(REAL_ARITH`azim x x' v' w' < azim x x' v w'==>azim x x' v' w' <= azim x x' v w'`)
3167 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
3168 THEN POP_ASSUM MP_TAC
3169 THEN REMOVE_ASSUM_TAC
3170 THEN POP_ASSUM MP_TAC
3171 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
3172 THEN DISCH_TAC THEN DISCH_TAC
3173 THEN MP_TAC(REAL_ARITH`pi < azim x x' v w' /\ azim x x' v w' = azim x x' v v' + pi
3174 /\ azim x x' v w' < &2 * pi==> &0 <azim x x' v v' /\ azim x x' v v' < pi`)
3176 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`x':real^3`;`v':real^3`]
3177 THEN REWRITE_TAC[EMPTY;IN]
3178 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3180 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3181 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3182 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3183 THEN SUBGOAL_THEN ` aff_ge {x} {w', v':real^3}=aff_ge {x} {v', w'}` ASSUME_TAC
3185 REWRITE_TAC[SET_RULE`{A,B}={B,A}`];(*14*)
3187 MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`w':real^3`;`v':real^3`;`x':real^3`]
3188 THEN POP_ASSUM MP_TAC
3189 THEN REMOVE_ASSUM_TAC
3190 THEN POP_ASSUM MP_TAC
3191 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3192 THEN POP_ASSUM MP_TAC
3193 THEN FIND_ASSUM MP_TAC`{v',w'} IN (E:(real^3->bool)->bool)`
3194 THEN SET_TAC[]](*14*);(*13*)
3196 MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
3197 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
3198 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
3199 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
3200 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,va:real^3}\/ ~(w' IN aff_gt {x} {v,va:real^3})`)
3202 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3203 THEN POP_ASSUM MP_TAC
3204 THEN POP_ASSUM MP_TAC
3205 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3207 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3208 THEN ASSUME_TAC(th))
3210 THEN POP_ASSUM MP_TAC
3211 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
3212 ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3213 THEN REDUCE_VECTOR_TAC
3214 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==> &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3216 THEN POP_ASSUM MP_TAC
3217 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3219 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3222 THEN MP_TAC(SET_RULE`
3223 t2'' + t3'' = &1 - t1'':real
3224 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3226 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3227 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3229 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3230 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3232 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3234 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3236 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3237 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3238 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3239 THEN POP_ASSUM MP_TAC
3240 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3241 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3242 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3243 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3244 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3246 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3247 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3248 THEN POP_ASSUM MP_TAC
3249 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
3250 [VECTOR_ARITH`&1 %A=A`]
3251 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
3252 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, w'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3253 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3255 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3256 THEN MRESA_TAC exists_element_in_half_sapace_fan
3257 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;` v:real^3`;`u:real^3`]
3258 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3260 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`w':real^3`;`u':real^3`]
3261 THEN REWRITE_TAC[EMPTY;IN]
3262 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3264 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3265 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3266 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3267 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
3268 THEN POP_ASSUM MP_TAC
3269 THEN POP_ASSUM MP_TAC
3270 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3271 THEN POP_ASSUM MP_TAC
3272 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
3273 THEN SET_TAC[];(*14*)
3275 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,va:real^3}\/ ~(v' IN aff_gt {x} {v,va:real^3})`)
3278 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3279 THEN POP_ASSUM MP_TAC
3280 THEN POP_ASSUM MP_TAC
3281 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3283 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3284 THEN ASSUME_TAC(th))
3286 THEN POP_ASSUM MP_TAC
3287 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
3288 ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3289 THEN REDUCE_VECTOR_TAC
3290 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==> &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3292 THEN POP_ASSUM MP_TAC
3293 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3295 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3298 THEN MP_TAC(SET_RULE`
3299 t2'' + t3'' = &1 - t1'':real
3300 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3302 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3303 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3305 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3306 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3308 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3310 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3312 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3313 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3314 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3315 THEN POP_ASSUM MP_TAC
3316 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3317 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3318 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3319 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3320 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3322 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3323 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3324 THEN POP_ASSUM MP_TAC
3325 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
3326 [VECTOR_ARITH`&1 %A=A`]
3327 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
3328 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, v'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3329 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3331 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3332 THEN MRESA_TAC exists_element_in_half_sapace_fan
3333 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;` v:real^3`;`u:real^3`]
3334 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3336 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v':real^3`;`u':real^3`]
3337 THEN REWRITE_TAC[EMPTY;IN]
3338 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3340 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3341 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3342 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3343 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
3344 THEN POP_ASSUM MP_TAC
3345 THEN POP_ASSUM MP_TAC
3346 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3347 THEN POP_ASSUM MP_TAC
3348 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
3349 THEN SET_TAC[];(*15*)
3351 SUBGOAL_THEN`~(w' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
3353 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3354 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`va:real^3`;`x':real^3`]
3355 THEN POP_ASSUM MP_TAC
3356 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3357 THEN ASM_REWRITE_TAC[]
3358 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
3359 THEN SET_TAC[];(*16*)
3361 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`] decomposition_planar_by_angle_fan)
3362 THEN ASM_REWRITE_TAC[]
3365 MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
3366 THEN MP_TAC(SET_RULE`v IN aff_gt {x} {x', w':real^3} /\ aff_gt {x} {x', w'} SUBSET aff_ge {x} {v', w'}
3367 ==>v IN aff_ge {x} {v', w':real^3}`)
3369 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `v:real^3`; `u:real^3`; `v':real^3`;`w':real^3`]properties_of_fan7)
3370 THEN ASM_REWRITE_TAC[]
3373 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3374 THEN POP_ASSUM MP_TAC
3375 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
3376 THEN MP_TAC(PI_WORKS)
3377 THEN REAL_ARITH_TAC;(*18*)
3379 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3380 THEN POP_ASSUM MP_TAC
3381 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
3382 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3384 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
3385 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3386 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`v':real^3`]
3387 THEN POP_ASSUM MP_TAC
3388 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3390 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`v':real^3`]
3391 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3392 THEN ASM_REWRITE_TAC[]
3395 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3396 THEN ASM_TAC THEN SET_TAC[];(*19*)
3398 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
3399 THEN POP_ASSUM MP_TAC
3400 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
3401 THEN ASM_REWRITE_TAC[]
3402 THEN POP_ASSUM MP_TAC
3403 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3404 THEN STRIP_TAC THEN STRIP_TAC
3405 THEN MP_TAC(SET_RULE`va IN aff_ge {x} {v', x':real^3} /\ aff_ge {x} {v', x'} SUBSET aff_ge {x} {v', w'}
3406 ==>va IN aff_ge {x} {v', w':real^3}`)
3408 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
3411 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3412 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
3414 THEN EXISTS_TAC`&1 -a:real`
3415 THEN EXISTS_TAC`a:real`
3416 THEN MP_TAC(REAL_ARITH`&0< a /\ a < &1 ==> &0 <= &1 - a /\ &0 <= a`)
3418 THEN ASM_REWRITE_TAC[]
3419 THEN REDUCE_VECTOR_TAC
3420 THEN REAL_ARITH_TAC;(*20*)
3423 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w}
3424 ==>va IN aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
3426 THEN POP_ASSUM MP_TAC
3427 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3428 THEN REWRITE_TAC[FAN;fan7]
3430 THEN POP_ASSUM (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th))
3431 THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3432 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
3433 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
3437 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3438 THEN REMOVE_ASSUM_TAC
3439 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
3440 THEN ASM_REWRITE_TAC[]
3442 THEN FIND_ASSUM MP_TAC `v IN aff_ge {x} {v', w':real^3}`
3443 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
3444 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
3446 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3447 THEN POP_ASSUM MP_TAC
3448 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3449 THEN ASM_REWRITE_TAC[]
3451 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3452 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3453 THEN POP_ASSUM MP_TAC
3454 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3455 THEN POP_ASSUM MP_TAC
3456 THEN SET_TAC[];(*21*)
3459 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
3461 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'} PSUBSET {u, w:real^3} ==> {u, w} INTER {v', w'} SUBSET {u}\/ {u, w} INTER {v', w'} SUBSET {w} `)
3462 THEN ASM_REWRITE_TAC[]
3466 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
3468 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3469 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,u}`)
3471 THEN REWRITE_TAC[IN;EMPTY]
3472 THEN POP_ASSUM MP_TAC
3473 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3474 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3475 THEN POP_ASSUM MP_TAC
3476 THEN MATCH_MP_TAC MONO_NOT
3477 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3479 THEN POP_ASSUM MP_TAC
3481 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
3482 <=> a % w = u' % x + (v''+a- &1) % u`]
3483 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
3485 THEN MP_TAC(SET_RULE`a % w = u' % x + (v'' + a - &1) % u:real^3 ==> (inv (a))%(a % w ) = (inv (a))%( u' % x + (v'' + a - &1) % u)`)
3486 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3487 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3488 THEN REDUCE_VECTOR_TAC
3490 THEN EXISTS_TAC`(inv a * u'):real`
3491 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
3492 THEN ASM_REWRITE_TAC[REAL_ARITH`inv a * u' + inv a * (v'' + a - &1) =inv a * ( a+ (u' + v'') - &1)`;REAL_ARITH`A+ &1- &1=A`];(*22*)
3495 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
3496 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3498 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
3499 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
3500 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3501 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,w}`)
3503 THEN REWRITE_TAC[IN;EMPTY]
3504 THEN POP_ASSUM MP_TAC
3505 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
3507 THEN MATCH_MP_TAC MONO_NOT
3508 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3510 THEN POP_ASSUM MP_TAC
3512 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
3513 <=> (&1-a )% u = u' % x + (v''-a) % w`]
3514 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
3515 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
3517 THEN MP_TAC(SET_RULE`(&1-a )% u = u' % x + (v''-a) % w:real^3 ==> (inv (&1-a))%((&1-a )% u ) = (inv (&1-a))%( u' % x + (v''-a) % w)`)
3518 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3519 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3520 THEN REDUCE_VECTOR_TAC
3522 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
3523 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
3524 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - a) * u' + inv (&1 - a) * (v'' - a)=inv (&1 - a) * ((u' + v'') - a)`]](*22*)](*21*)](*20*)](*19*)](*18*);(*17*)
3530 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3532 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
3533 THEN POP_ASSUM MP_TAC
3534 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3535 THEN ASM_REWRITE_TAC[]
3537 THEN MP_TAC(SET_RULE`aff_ge {x} {v, x':real^3} SUBSET aff_gt {x, v} {x'} UNION aff_ge {x} {v} /\ w' IN aff_ge {x} {v, x'} ==> w' IN aff_gt {x, v} {x'} UNION aff_ge {x} {v}`)
3539 THEN POP_ASSUM MP_TAC
3540 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3541 THEN POP_ASSUM MP_TAC
3542 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
3543 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
3545 THEN ASM_REWRITE_TAC[]
3547 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `w':real^3`; `v':real^3`; `v:real^3`;`u:real^3`]properties1_of_fan7)
3548 THEN ASM_REWRITE_TAC[]
3550 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
3552 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
3553 THEN SUBGOAL_THEN`v IN aff_ge {x} {v', w':real^3}`ASSUME_TAC
3555 POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];(*18*)
3557 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3558 THEN POP_ASSUM MP_TAC
3559 THEN DISCH_THEN (LABEL_TAC"NHAT")
3561 THEN REMOVE_THEN "NHAT" MP_TAC
3563 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3564 THEN POP_ASSUM MP_TAC
3565 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
3566 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3568 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
3569 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3570 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`v':real^3`]
3571 THEN POP_ASSUM MP_TAC
3572 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3574 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`v':real^3`]
3575 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3576 THEN ASM_REWRITE_TAC[]
3580 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3581 THEN ASM_TAC THEN SET_TAC[];(*19*)
3583 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
3584 THEN POP_ASSUM MP_TAC
3585 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
3586 THEN ASM_REWRITE_TAC[]
3587 THEN POP_ASSUM MP_TAC
3588 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3589 THEN STRIP_TAC THEN STRIP_TAC
3590 THEN MP_TAC(SET_RULE`va IN aff_ge {x} {v', x':real^3} /\ aff_ge {x} {v', x'} SUBSET aff_ge {x} {v', w'}
3591 ==>va IN aff_ge {x} {v', w':real^3}`)
3593 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
3596 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3597 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
3599 THEN EXISTS_TAC`&1 -a:real`
3600 THEN EXISTS_TAC`a:real`
3601 THEN MP_TAC(REAL_ARITH`&0< a /\ a < &1 ==> &0 <= &1 - a /\ &0 <= a`)
3603 THEN ASM_REWRITE_TAC[]
3604 THEN REDUCE_VECTOR_TAC
3605 THEN REAL_ARITH_TAC;(*20*)
3607 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w}
3608 ==>va IN aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
3610 THEN POP_ASSUM MP_TAC
3611 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3612 THEN REWRITE_TAC[FAN;fan7]
3614 THEN POP_ASSUM (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th))
3615 THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3616 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
3617 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
3621 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3622 THEN REMOVE_ASSUM_TAC
3623 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
3624 THEN ASM_REWRITE_TAC[]
3626 THEN FIND_ASSUM MP_TAC `v IN aff_ge {x} {v', w':real^3}`
3627 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
3628 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
3630 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3631 THEN POP_ASSUM MP_TAC
3632 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3633 THEN ASM_REWRITE_TAC[]
3635 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3636 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3637 THEN POP_ASSUM MP_TAC
3638 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3639 THEN POP_ASSUM MP_TAC
3640 THEN SET_TAC[];(*21*)
3642 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
3644 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'} PSUBSET {u, w:real^3} ==> {u, w} INTER {v', w'} SUBSET {u}\/ {u, w} INTER {v', w'} SUBSET {w} `)
3645 THEN ASM_REWRITE_TAC[]
3649 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
3651 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3652 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,u}`)
3654 THEN REWRITE_TAC[IN;EMPTY]
3655 THEN POP_ASSUM MP_TAC
3656 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3657 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3658 THEN POP_ASSUM MP_TAC
3659 THEN MATCH_MP_TAC MONO_NOT
3660 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3662 THEN POP_ASSUM MP_TAC
3664 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
3665 <=> a % w = u' % x + (v''+a- &1) % u`]
3666 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
3668 THEN MP_TAC(SET_RULE`a % w = u' % x + (v'' + a - &1) % u:real^3 ==> (inv (a))%(a % w ) = (inv (a))%( u' % x + (v'' + a - &1) % u)`)
3669 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3670 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3671 THEN REDUCE_VECTOR_TAC
3673 THEN EXISTS_TAC`(inv a * u'):real`
3674 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
3675 THEN ASM_REWRITE_TAC[REAL_ARITH`inv a * u' + inv a * (v'' + a - &1) =inv a * ( a+ (u' + v'') - &1)`;REAL_ARITH`A+ &1- &1=A`];(*22*)
3679 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
3680 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3682 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
3683 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
3684 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3685 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,w}`)
3687 THEN REWRITE_TAC[IN;EMPTY]
3688 THEN POP_ASSUM MP_TAC
3689 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
3691 THEN MATCH_MP_TAC MONO_NOT
3692 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3694 THEN POP_ASSUM MP_TAC
3696 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
3697 <=> (&1-a )% u = u' % x + (v''-a) % w`]
3698 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
3699 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
3701 THEN MP_TAC(SET_RULE`(&1-a )% u = u' % x + (v''-a) % w:real^3 ==> (inv (&1-a))%((&1-a )% u ) = (inv (&1-a))%( u' % x + (v''-a) % w)`)
3702 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3703 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3704 THEN REDUCE_VECTOR_TAC
3706 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
3707 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
3708 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - a) * u' + inv (&1 - a) * (v'' - a)=inv (&1 - a) * ((u' + v'') - a)`]](*22*)](*21*)](*20*)](*19*)](*18*)](*17*)](*16*)](*15*)](*14*);(*13*)
3713 THEN DISCH_THEN(LABEL_TAC"CUOI")
3714 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
3715 THEN ASSUME_TAC(REAL_ARITH`pi<= pi`)
3716 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
3717 THEN POP_ASSUM MP_TAC
3718 THEN REWRITE_TAC[REAL_ARITH`A=B+A<=>B= &0`]
3720 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
3721 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
3722 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
3723 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
3724 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,va:real^3}\/ ~(w' IN aff_gt {x} {v,va:real^3})`)
3727 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3728 THEN POP_ASSUM MP_TAC
3729 THEN POP_ASSUM MP_TAC
3730 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3732 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3733 THEN ASSUME_TAC(th))
3735 THEN POP_ASSUM MP_TAC
3736 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
3737 ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3738 THEN REDUCE_VECTOR_TAC
3739 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==> &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3741 THEN POP_ASSUM MP_TAC
3742 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3744 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3747 THEN MP_TAC(SET_RULE`
3748 t2'' + t3'' = &1 - t1'':real
3749 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3751 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3752 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3754 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3755 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3757 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3759 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3761 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3762 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3763 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3764 THEN POP_ASSUM MP_TAC
3765 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3766 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3767 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3768 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3769 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3771 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3772 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3773 THEN POP_ASSUM MP_TAC
3774 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
3775 [VECTOR_ARITH`&1 %A=A`]
3776 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
3777 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, w'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3778 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3780 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3781 THEN MRESA_TAC exists_element_in_half_sapace_fan
3782 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;` v:real^3`;`u:real^3`]
3783 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3785 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`w':real^3`;`u':real^3`]
3786 THEN REWRITE_TAC[EMPTY;IN]
3787 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3789 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3790 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3791 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3792 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
3793 THEN POP_ASSUM MP_TAC
3794 THEN POP_ASSUM MP_TAC
3795 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3796 THEN POP_ASSUM MP_TAC
3797 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
3798 THEN SET_TAC[];(*14*)
3800 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,va:real^3}\/ ~(v' IN aff_gt {x} {v,va:real^3})`)
3803 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3804 THEN POP_ASSUM MP_TAC
3805 THEN POP_ASSUM MP_TAC
3806 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3808 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3809 THEN ASSUME_TAC(th))
3811 THEN POP_ASSUM MP_TAC
3812 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
3813 ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3814 THEN REDUCE_VECTOR_TAC
3815 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==> &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3817 THEN POP_ASSUM MP_TAC
3818 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3820 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3823 THEN MP_TAC(SET_RULE`
3824 t2'' + t3'' = &1 - t1'':real
3825 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3827 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3828 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3830 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3831 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3833 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3835 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3837 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3838 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3839 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3840 THEN POP_ASSUM MP_TAC
3841 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3842 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3843 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3844 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3845 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3847 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3848 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3849 THEN POP_ASSUM MP_TAC
3850 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
3851 [VECTOR_ARITH`&1 %A=A`]
3852 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
3853 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, v'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3854 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3856 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3857 THEN MRESA_TAC exists_element_in_half_sapace_fan
3858 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;` v:real^3`;`u:real^3`]
3859 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3861 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v':real^3`;`u':real^3`]
3862 THEN REWRITE_TAC[EMPTY;IN]
3863 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3865 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3866 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3867 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3868 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
3869 THEN POP_ASSUM MP_TAC
3870 THEN POP_ASSUM MP_TAC
3871 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3872 THEN POP_ASSUM MP_TAC
3873 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
3874 THEN SET_TAC[];(*15*)
3876 SUBGOAL_THEN`~(v' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
3878 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3879 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`va:real^3`;`x':real^3`]
3880 THEN POP_ASSUM MP_TAC
3881 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3882 THEN ASM_REWRITE_TAC[]
3883 THEN POP_ASSUM MP_TAC
3884 THEN SET_TAC[];(*16*)
3886 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`] decomposition_planar_by_angle_fan)
3887 THEN ASM_REWRITE_TAC[]
3891 MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
3892 THEN MP_TAC(SET_RULE`v IN aff_gt {x} {x', v':real^3} /\ aff_gt {x} {x', v'} SUBSET aff_ge {x} {v', w'}
3893 ==>v IN aff_ge {x} {v', w':real^3}`)
3895 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `v:real^3`; `u:real^3`; `v':real^3`;`w':real^3`]properties_of_fan7)
3896 THEN ASM_REWRITE_TAC[]
3899 MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3900 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3901 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`w':real^3`]
3902 THEN POP_ASSUM MP_TAC
3903 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3905 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`w':real^3`]
3906 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3907 THEN ASM_REWRITE_TAC[]
3911 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3912 THEN ASM_TAC THEN SET_TAC[];(*19*)
3914 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3915 THEN ASM_TAC THEN SET_TAC[]](*19*);(*18*)
3918 REMOVE_THEN "CUOI" MP_TAC
3919 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
3920 THEN REWRITE_TAC[AZIM_REFL]
3921 THEN MP_TAC(PI_WORKS)
3922 THEN REAL_ARITH_TAC](*18*);(*17*)
3925 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3927 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
3928 THEN POP_ASSUM MP_TAC
3929 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3930 THEN ASM_REWRITE_TAC[]
3932 THEN MP_TAC(SET_RULE`aff_ge {x} {v, x':real^3} SUBSET aff_gt {x, v} {x'} UNION aff_ge {x} {v} /\ v' IN aff_ge {x} {v, x'} ==> v' IN aff_gt {x, v} {x'} UNION aff_ge {x} {v}`)
3934 THEN POP_ASSUM MP_TAC
3935 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3936 THEN POP_ASSUM MP_TAC
3937 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
3938 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
3940 THEN ASM_REWRITE_TAC[]
3942 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `v':real^3`; `w':real^3`; `v:real^3`;`u:real^3`]properties1_of_fan7)
3943 THEN ASM_REWRITE_TAC[]
3945 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
3947 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
3948 THEN MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3949 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3950 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`w':real^3`]
3951 THEN POP_ASSUM MP_TAC
3952 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3954 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`w':real^3`]
3955 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3956 THEN ASM_REWRITE_TAC[]
3959 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3960 THEN ASM_TAC THEN SET_TAC[];(*18*)
3963 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3964 THEN MP_TAC(SET_RULE`va IN aff_ge {x} { x',w':real^3} /\ aff_ge {x} { x',w'} SUBSET aff_ge {x} {v', w'}
3965 ==>va IN aff_ge {x} {v', w':real^3}`)
3967 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
3970 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3971 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
3973 THEN EXISTS_TAC`&1 -a:real`
3974 THEN EXISTS_TAC`a:real`
3975 THEN MP_TAC(REAL_ARITH`&0< a /\ a < &1 ==> &0 <= &1 - a /\ &0 <= a`)
3977 THEN ASM_REWRITE_TAC[]
3978 THEN REDUCE_VECTOR_TAC
3979 THEN REAL_ARITH_TAC;(*19*)
3981 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w}
3982 ==>va IN aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
3984 THEN POP_ASSUM MP_TAC
3985 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3986 THEN REWRITE_TAC[FAN;fan7]
3988 THEN POP_ASSUM (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th))
3989 THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3990 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
3991 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
3994 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3995 THEN REMOVE_ASSUM_TAC
3996 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
3997 THEN ASM_REWRITE_TAC[]
3999 THEN FIND_ASSUM MP_TAC `v' IN aff_ge {x} {v', w':real^3}`
4000 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
4001 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
4003 THEN FIND_ASSUM MP_TAC `~collinear {x, v, u:real^3}`
4004 THEN FIND_ASSUM MP_TAC `v=v':real^3`
4006 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
4008 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4009 THEN POP_ASSUM MP_TAC
4010 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4011 THEN ASM_REWRITE_TAC[]
4013 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4014 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
4015 THEN POP_ASSUM MP_TAC
4016 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4017 THEN POP_ASSUM MP_TAC
4018 THEN SET_TAC[];(*20*)
4020 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
4022 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'} PSUBSET {u, w:real^3} ==> {u, w} INTER {v', w'} SUBSET {u}\/ {u, w} INTER {v', w'} SUBSET {w} `)
4023 THEN ASM_REWRITE_TAC[]
4027 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
4029 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
4030 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,u}`)
4032 THEN REWRITE_TAC[IN;EMPTY]
4033 THEN POP_ASSUM MP_TAC
4034 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4035 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4036 THEN POP_ASSUM MP_TAC
4037 THEN MATCH_MP_TAC MONO_NOT
4038 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4040 THEN POP_ASSUM MP_TAC
4042 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
4043 <=> a % w = u' % x + (v''+a- &1) % u`]
4044 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
4046 THEN MP_TAC(SET_RULE`a % w = u' % x + (v'' + a - &1) % u:real^3 ==> (inv (a))%(a % w ) = (inv (a))%( u' % x + (v'' + a - &1) % u)`)
4047 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4048 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4049 THEN REDUCE_VECTOR_TAC
4051 THEN EXISTS_TAC`(inv a * u'):real`
4052 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
4053 THEN ASM_REWRITE_TAC[REAL_ARITH`inv a * u' + inv a * (v'' + a - &1) =inv a * ( a+ (u' + v'') - &1)`;REAL_ARITH`A+ &1- &1=A`];(*21*)
4057 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
4058 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4060 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
4061 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
4062 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
4063 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,w}`)
4065 THEN REWRITE_TAC[IN;EMPTY]
4066 THEN POP_ASSUM MP_TAC
4067 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
4069 THEN MATCH_MP_TAC MONO_NOT
4070 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4072 THEN POP_ASSUM MP_TAC
4074 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
4075 <=> (&1-a )% u = u' % x + (v''-a) % w`]
4076 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
4077 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
4079 THEN MP_TAC(SET_RULE`(&1-a )% u = u' % x + (v''-a) % w:real^3 ==> (inv (&1-a))%((&1-a )% u ) = (inv (&1-a))%( u' % x + (v''-a) % w)`)
4080 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4081 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4082 THEN REDUCE_VECTOR_TAC
4084 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
4085 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
4086 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - a) * u' + inv (&1 - a) * (v'' - a)=inv (&1 - a) * ((u' + v'') - a)`]](*21*)](*20*)](*19*)](*18*)](*17*)](*16*)](*15*)](*14*)](*13*)](*12*)](*11*)](*10*)](*9*)]
4087 (*8*)](*7*)](*6*)](*5*)](*4*)](*3*)](*2*);(*1*)
4094 let exist_close1_fan=prove(`(!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4096 FAN(x,V,E) /\ {v,u} INTER {v1,w1}={} /\ {v1,w1} IN E /\ {v,u} IN E /\ {u,w} IN E
4097 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
4099 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
4100 {v | ?e. e IN E /\ v IN aff_ge {x} e} = {})
4105 (!y1:real^3 y2:real^3. y1 IN (aff_ge {x} {v, (&1 - a) % u + a % w} INTER ballnorm_fan x) /\ y2 IN (aff_ge {x} {v1, w1} INTER ballnorm_fan x)
4106 ==> h <= dist(y1,y2) ))`,
4108 THEN POP_ASSUM MP_TAC
4109 THEN DISCH_THEN(LABEL_TAC"EM")
4110 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
4112 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
4114 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4115 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;`a:real`]
4117 THEN MATCH_MP_TAC( ISPECL [`aff_ge {(x:real^3)} {(v:real^3), ((&1 - a) % u + a % w:real^3)} INTER ballnorm_fan x`;
4118 `aff_ge {(x:real^3)} {(v1:real^3), (w1:real^3)} INTER ballnorm_fan x`] SEPARATE_CLOSED_COMPACT)
4119 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v:real^3)`;` ((&1 - a) % u + a % w:real^3)`]closed_aff_ge_ballnorm_fan)
4121 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v1:real^3)`;` (w1:real^3)`]compact_aff_ge_ballnorm_fan) THEN RESA_TAC
4122 THEN REMOVE_THEN "EM" MP_TAC
4123 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
4124 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;` (v:real^3)`;`((&1 - a) % u + a % w:real^3)`]
4125 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
4126 THEN REWRITE_TAC[FAN;fan7]
4128 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(v:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
4129 THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4130 THEN MP_TAC(SET_RULE`(v:real^3) IN V==>(?v'. v' IN V /\ {v} = {v'})`)
4132 THEN MP_TAC(SET_RULE`{(v:real^3),u} INTER {v1,w1}={} ==> {v} INTER {v1,w1}={}`)
4134 THEN REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1;]
4135 THEN STRIP_TAC THEN SUBGOAL_THEN`(aff_ge {x} {v} INTER aff_ge {x} {v1, w1:real^3}) INTER ballnorm_fan x={}`
4138 ASM_REWRITE_TAC[INTER;ballnorm_fan;EXTENSION;IN_ELIM_THM;SET_RULE`(?u. u = &1 /\ x' = u % x)<=> x'= &1 % x`;]
4139 THEN REDUCE_VECTOR_TAC
4140 THEN GEN_TAC THEN EQ_TAC
4142 STRIP_TAC THEN POP_ASSUM MP_TAC
4143 THEN ASM_REWRITE_TAC[DIST_REFL]
4144 THEN REAL_ARITH_TAC;
4147 ABBREV_TAC`va=(&1 - a) % u + a % w:real^3`
4148 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
4150 MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
4152 THEN EXISTS_TAC`&1 -a:real`
4153 THEN EXISTS_TAC`a:real`
4154 THEN MP_TAC(REAL_ARITH`&0< a /\ a < &1 ==> &0 <= &1 - a /\ &0 <= a`)
4156 THEN ASM_REWRITE_TAC[]
4157 THEN REDUCE_VECTOR_TAC
4158 THEN REAL_ARITH_TAC;(*2*)
4160 SUBGOAL_THEN`(aff_ge {x} {va} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`
4163 MRESA_TAC th3[` (x:real^3)`;`(v:real^3)`;`(va:real^3)`]
4164 THEN MRESA_TAC aff_ge1_1_subset_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`;`va:real^3`]
4165 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
4166 THEN REWRITE_TAC[FAN;fan7]
4168 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
4169 THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4170 THEN MP_TAC(SET_RULE`{v,u} INTER {v1,w1}={}==> {u,w} INTER {v1,w1} SUBSET {w:real^3}`)
4173 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v1, w1:real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
4174 THEN POP_ASSUM MP_TAC
4175 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
4176 THEN REMOVE_ASSUM_TAC
4178 THEN MP_TAC(SET_RULE`aff_ge {x} {va} SUBSET aff_ge {x} {u, w}/\
4179 aff_ge {x} {u, w} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {w}
4180 ==> aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {va} INTER aff_ge {x} {w}`)
4182 THEN MATCH_MP_TAC(SET_RULE` aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {va} INTER aff_ge {x} {w} /\ aff_ge {x} {va} INTER aff_ge {x} {w} SUBSET {x:real^3} ==>aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET {x}`)
4183 THEN ASM_REWRITE_TAC[]
4184 THEN MRESAL_TAC AFF_GE_1_1[`x:real^3`;`va:real^3`;][IN_ELIM_THM;SUBSET;INTER]
4185 THEN MRESAL_TAC AFF_GE_1_1[`x:real^3`;`w:real^3`;][IN_ELIM_THM;SUBSET;IN_SING]
4186 THEN REPEAT STRIP_TAC
4187 THEN POP_ASSUM MP_TAC
4188 THEN ASM_REWRITE_TAC[]
4190 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % ((&1 - a) % u + a % w) = t1' % x + t2' % w
4191 <=> (t2 *(&1 - a)) % u = (t1'-t1) % x + (t2'- t2*a) % w:real^3`]
4192 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0 < t2:real`)
4195 FIND_ASSUM MP_TAC`t1+ t2:real= &1`
4196 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
4197 THEN REDUCE_ARITH_TAC
4199 THEN ASM_REWRITE_TAC[]
4200 THEN REDUCE_VECTOR_TAC;(*4*)
4202 MP_TAC(REAL_ARITH`a< &1==> &0< &1-a:real`) THEN RESA_TAC
4203 THEN MRESA_TAC REAL_LT_MUL[`t2:real`;`&1- a:real`]
4204 THEN MP_TAC(REAL_ARITH` &0< t2*(&1-a)==> ~(t2*(&1-a):real= &0)`) THEN RESA_TAC
4205 THEN MRESA1_TAC REAL_MUL_LINV`t2*(&1-a):real`
4206 THEN MRESA1_TAC REAL_LT_INV`t2*(&1-a):real`
4208 THEN MP_TAC(SET_RULE`(t2 * (&1 - a)) % u = (t1' - t1) % x + (t2' - t2 * a) % w:real^3 ==> (inv (t2 * (&1 - a)))%((t2 * (&1 - a)) % u ) = (inv (t2 * (&1 - a)))%((t1' - t1) % x + (t2' - t2 * a) % w)`)
4209 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4210 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4211 THEN REDUCE_VECTOR_TAC
4213 THEN SUBGOAL_THEN`u IN aff {x,w:real^3}`ASSUME_TAC
4215 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4216 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t1' - t1)):real`
4217 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t2' - t2 * a)):real`
4218 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 * (&1 - a)) * (t1' - t1) + inv (t2 * (&1 - a)) * (t2' - t2 * a)
4219 = inv (t2 * (&1 - a)) * ((t1' +t2')- (t1+t2)+ t2*(&1 - a)):real`; REAL_ARITH`&1- &1 + A= A`];(*5*)
4221 FIND_ASSUM MP_TAC `~collinear {x, u, w:real^3}`
4222 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4224 THEN MRESA_TAC th3[`x:real^3`;`w:real^3`;`u:real^3`]]];(*3*)
4227 SUBGOAL_THEN`(aff_ge {x} {va} INTER aff_ge {x} {v1, w1:real^3}) INTER ballnorm_fan x={}`
4230 ASM_REWRITE_TAC[INTER;ballnorm_fan;EXTENSION;IN_ELIM_THM;]
4231 THEN REDUCE_VECTOR_TAC
4232 THEN GEN_TAC THEN EQ_TAC
4234 STRIP_TAC THEN POP_ASSUM MP_TAC
4235 THEN MP_TAC(SET_RULE`x' IN aff_ge {x} {va} /\ x' IN aff_ge {x} {v1, w1}
4236 /\ aff_ge {x} {va} INTER aff_ge {x} {v1, w1} SUBSET {x}
4237 ==> x' IN {x:real^3}`)
4238 THEN REWRITE_TAC[IN_SING]
4240 THEN ASM_REWRITE_TAC[DIST_REFL;]
4241 THEN REAL_ARITH_TAC;(*5*)
4243 ASM_TAC THEN SET_TAC[]]]]]);;
4248 let lemma_proof0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4250 FAN(x,V,E) /\ {v1,w1} IN E /\ {u,w} IN E /\ ~(u IN {v1,w1})
4252 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
4254 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
4256 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4257 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
4258 THEN ABBREV_TAC`va=(&1 - a) % u + a % w:real^3`
4259 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
4260 THEN MRESA_TAC properties_inside_collinear_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;`a:real`]
4261 THEN MRESA_TAC th3[` (x:real^3)`;`(va:real^3)`;`(u:real^3)`]
4262 THEN MRESA_TAC aff_ge1_1_subset_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`;`va:real^3`]
4263 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
4264 THEN REWRITE_TAC[FAN;fan7]
4266 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
4267 THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4268 THEN MP_TAC(SET_RULE`~(u IN {v1,w1})==> {u,w} INTER {v1,w1} SUBSET {w:real^3}`)
4271 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v1, w1:real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
4272 THEN POP_ASSUM MP_TAC
4273 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
4274 THEN REMOVE_ASSUM_TAC
4276 THEN MP_TAC(SET_RULE`aff_ge {x} {va} SUBSET aff_ge {x} {u, w}/\
4277 aff_ge {x} {u, w} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {w}
4278 ==> aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {va} INTER aff_ge {x} {w}`)
4280 THEN MATCH_MP_TAC(SET_RULE` aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {va} INTER aff_ge {x} {w} /\ aff_ge {x} {va} INTER aff_ge {x} {w} SUBSET {x:real^3} ==>aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET {x}`)
4281 THEN ASM_REWRITE_TAC[]
4282 THEN MRESAL_TAC AFF_GE_1_1[`x:real^3`;`va:real^3`;][IN_ELIM_THM;SUBSET;INTER]
4283 THEN MRESAL_TAC AFF_GE_1_1[`x:real^3`;`w:real^3`;][IN_ELIM_THM;SUBSET;IN_SING]
4284 THEN REPEAT STRIP_TAC
4285 THEN POP_ASSUM MP_TAC
4286 THEN ASM_REWRITE_TAC[]
4288 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % ((&1 - a) % u + a % w) = t1' % x + t2' % w
4289 <=> (t2 *(&1 - a)) % u = (t1'-t1) % x + (t2'- t2*a) % w:real^3`]
4290 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0 < t2:real`)
4293 FIND_ASSUM MP_TAC`t1+ t2:real= &1`
4294 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
4295 THEN REDUCE_ARITH_TAC
4297 THEN ASM_REWRITE_TAC[]
4298 THEN REDUCE_VECTOR_TAC;
4299 MP_TAC(REAL_ARITH`a< &1==> &0< &1-a:real`) THEN RESA_TAC
4300 THEN MRESA_TAC REAL_LT_MUL[`t2:real`;`&1- a:real`]
4301 THEN MP_TAC(REAL_ARITH` &0< t2*(&1-a)==> ~(t2*(&1-a):real= &0)`) THEN RESA_TAC
4302 THEN MRESA1_TAC REAL_MUL_LINV`t2*(&1-a):real`
4303 THEN MRESA1_TAC REAL_LT_INV`t2*(&1-a):real`
4305 THEN MP_TAC(SET_RULE`(t2 * (&1 - a)) % u = (t1' - t1) % x + (t2' - t2 * a) % w:real^3 ==> (inv (t2 * (&1 - a)))%((t2 * (&1 - a)) % u ) = (inv (t2 * (&1 - a)))%((t1' - t1) % x + (t2' - t2 * a) % w)`)
4306 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4307 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4308 THEN REDUCE_VECTOR_TAC
4310 THEN SUBGOAL_THEN`u IN aff {x,w:real^3}`ASSUME_TAC
4312 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4313 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t1' - t1)):real`
4314 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t2' - t2 * a)):real`
4315 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 * (&1 - a)) * (t1' - t1) + inv (t2 * (&1 - a)) * (t2' - t2 * a)
4316 = inv (t2 * (&1 - a)) * ((t1' +t2')- (t1+t2)+ t2*(&1 - a)):real`; REAL_ARITH`&1- &1 + A= A`];
4317 FIND_ASSUM MP_TAC `~collinear {x, u, w:real^3}`
4318 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4320 THEN MRESA_TAC th3[`x:real^3`;`w:real^3`;`u:real^3`]]]);;
4323 let lemma_proof1_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4325 FAN(x,V,E) /\ {v1,w1} IN E /\ {u,w} IN E /\ ~(w IN {v1,w1})
4327 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
4330 THEN MRESAL_TAC lemma_proof0_fan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(w:real^3)`;` (u:real^3)`;`(v1:real^3)`;`(w1:real^3)`;`&1 -a:real`][VECTOR_ARITH`(&1 - (&1 - a)) % w + (&1 - a) % u=(&1 - a) % u + a % w`;]
4331 THEN POP_ASSUM MATCH_MP_TAC
4332 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4333 THEN ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);;
4335 let lemma_proof_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4337 FAN(x,V,E) /\ {v1,w1} IN E /\ {u,w} IN E /\ ~({u,w} = {v1,w1})
4339 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
4342 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
4344 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4345 THEN MP_TAC(SET_RULE` ~(u=w) /\ ~(v1=w1:real^3)==> ({u,w} = {v1,w1}<=> {u,w} SUBSET {v1,w1})`)
4346 THEN ASM_REWRITE_TAC[SET_RULE`~({u,w} SUBSET {v1,w1})<=> ~(w IN {v1,w1})\/ ~( u IN {v1,w1})`]
4347 THEN ASM_TAC THEN SET_TAC[lemma_proof0_fan;lemma_proof1_fan]);;
4352 let remark012_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) a:real.
4353 FAN(x,V,E) /\ {u,w} IN E
4355 ==> ~((&1 - a) % u + a % w IN V)`,
4357 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4358 THEN ABBREV_TAC`v1=(&1 - a) % u + a % w:real^3`
4359 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4360 THEN REWRITE_TAC[FAN;fan2]
4362 THEN REMOVE_ASSUM_TAC
4363 THEN POP_ASSUM MP_TAC
4364 THEN MP_TAC(SET_RULE`~(x IN V) /\ v1 IN V==> ~(x=(v1:real^3))`)
4366 THEN MRESA_TAC properties_inside_collinear_fan[`(x:real^3)`;`(u:real^3)`;`(w:real^3)`;`a:real`]
4367 THEN MRESA_TAC th3[`(x:real^3)`;`((&1-a)%u+ a%w:real^3)`;`(w:real^3)`]
4368 THEN MRESA_TAC th3[`(x:real^3)`;`((&1-a)%u+ a%w:real^3)`;`(u:real^3)`]
4369 THEN MP_TAC(SET_RULE`DISJOINT {x, v1} {u}==> ~(v1=u:real^3)`) THEN RESA_TAC
4370 THEN MP_TAC(SET_RULE`DISJOINT {x, v1} {w}==> ~(v1=w:real^3)`) THEN RESA_TAC
4371 THEN MP_TAC(SET_RULE` ~(v1=w:real^3) /\ ~(v1=u:real^3) ==> {u,w} INTER {v1}={}`) THEN RESA_TAC
4372 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4373 THEN REWRITE_TAC[FAN;fan7]
4375 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),w}`;`({v1:real^3})`]th))
4376 THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4377 THEN MP_TAC(SET_RULE`(v1:real^3) IN V==>(?v'. v' IN V /\ {v1} = {v'})`)
4379 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
4380 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`; `w:real^3`;`v1:real^3`]
4381 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`((&1 - a) % u + a % w:real^3)`;` (w:real^3)`]
4382 THEN MP_TAC(SET_RULE`aff_ge {x} {v1, w} SUBSET aff_ge {x} {u, w}/\ aff_ge {x} {v1, w} =
4383 aff_gt {x} {v1, w} UNION aff_ge {x} {v1} UNION aff_ge {x} {w}
4384 ==> aff_ge {x} {u, w} INTER aff_ge {x} {v1}=aff_ge {x} {v1:real^3}`)
4387 THEN SUBGOAL_THEN`v1 IN aff_ge {x} {v1:real^3}` ASSUME_TAC
4388 THENL[MRESAL_TAC AFF_GE_1_1[`x:real^3`;`v1:real^3`;][IN_ELIM_THM]
4389 THEN EXISTS_TAC`&0` THEN EXISTS_TAC`&1` THEN REDUCE_VECTOR_TAC THEN REAL_ARITH_TAC;
4391 THEN ASM_REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1;SUBSET;IN_SING;IN_ELIM_THM]
4393 THEN POP_ASSUM MP_TAC
4394 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&1 %A=A`]]);;
4397 let remark01_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4398 FAN(x,V,E) /\ {v1,w1} IN E /\ {u,w} IN E /\ ~({u,w} = {v1,w1})
4400 ==> ~((&1 - a) % u + a % w IN {v1, w1:real^3})`,
4402 THEN POP_ASSUM MP_TAC
4403 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w1:real^3`;`v1:real^3`]
4404 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
4405 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4407 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` v1:real^3`;`w1:real^3`]
4408 THEN MRESA_TAC remark012_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`;`a:real`]
4409 THEN ASM_TAC THEN SET_TAC[]);;
4412 let remark0_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) e:real^3->bool.
4414 ==> {x} INTER e={}`,
4415 REPEAT STRIP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"A") THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
4417 THEN REMOVE_THEN "A" MP_TAC
4419 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
4420 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4421 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4422 THEN POP_ASSUM MP_TAC THEN SET_TAC[]);;
4426 let case2_proof_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
4427 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E
4428 /\ &0 < azim x u w v /\ azim x u w v < pi
4432 /\ ~collinear {x,w,ua}
4433 /\ (aff_gt {x} {v, ua} INTER
4434 {v | ?e. e IN E /\ v IN aff_ge {x} e} = {})
4435 ==> (!e. e IN (E DELETE {u,w}) ==> aff_ge {x} e INTER aff_ge {x} {ua,w} = aff_ge {x} (e INTER {ua,w}))`,
4437 THEN FIND_ASSUM MP_TAC `~collinear {x,w,ua:real^3}`
4438 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4440 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4441 THEN FIND_ASSUM MP_TAC `e IN E DELETE {u,w:real^3}`
4442 THEN REWRITE_TAC[DELETE;IN_ELIM_THM;SET_RULE`~(e={u,w:real^3})<=> ~({u,w:real^3}=e)`]
4444 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
4446 THEN MRESA_TAC lemma_proof_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`(w:real^3)`;`(v':real^3)`;`(w':real^3)`;`a:real`]
4447 THEN MRESA_TAC remark01_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`(w:real^3)`;`(v':real^3)`;`(w':real^3)`;`a:real`]
4448 THEN POP_ASSUM MP_TAC
4449 THEN POP_ASSUM MP_TAC
4450 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM(th)])
4451 THEN RESA_TAC THEN RESA_TAC
4452 THEN MP_TAC(SET_RULE`~(ua IN e)==> e INTER {ua,w:real^3} SUBSET {w}`)
4454 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
4455 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`; `w:real^3`;`ua:real^3`]
4456 THEN MRESA_TAC th3[` (x:real^3)`;`(ua:real^3)`;`(w:real^3)`]
4457 THEN MRESA_TAC remark0_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`e:real^3->bool`]
4458 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`e INTER { ua,w:real^3}`;`e:real^3->bool`][DISJOINT;SET_RULE` e INTER {ua,w} SUBSET e`;]
4459 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`e INTER { ua,w:real^3}`;`{ua,w:real^3}`][DISJOINT;SET_RULE` e INTER {ua,w} SUBSET {ua,w:real^3}`;]
4460 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{}:real^3->bool`;`{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w}={} <=> ~(x=w)`;SET_RULE` {} SUBSET {w:real^3}`;]
4461 THEN MATCH_MP_TAC(SET_RULE`C SUBSET A /\ C SUBSET B /\ A INTER B SUBSET C==>A INTER B= C`)
4462 THEN ASM_REWRITE_TAC[]
4463 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4464 THEN REWRITE_TAC[FAN;fan7]
4466 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),w}`;`(e:real^3->bool)`]th))
4467 THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4468 THEN DISJ_CASES_TAC(SET_RULE`{u,w:real^3} INTER e= {u,w} \/ ~({u,w} INTER e= {u,w})`)
4469 THENL[MP_TAC(SET_RULE`{u,w} INTER e= {u,w:real^3}==> {u,w} SUBSET e`)
4471 THEN POP_ASSUM MP_TAC
4472 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
4475 THEN MP_TAC(SET_RULE` ~(u=w:real^3) ==> ({u,w} = {v',w'}<=> {u,w} SUBSET {v',w'})`)
4477 THEN ASM_TAC THEN SET_TAC[];
4479 MP_TAC(SET_RULE` e INTER {ua,w:real^3} SUBSET {w}==> e INTER { ua,w:real^3} = {w} \/ e INTER { ua,w:real^3}= {}`)
4483 MP_TAC(SET_RULE`e INTER {ua, w} = {w:real^3}==> w IN e`)
4485 THEN MP_TAC(SET_RULE`~({u, w} INTER e = {u, w:real^3}) ==> {u, w} INTER e PSUBSET {u, w} `)
4487 THEN MP_TAC(SET_RULE`{u, w} INTER e PSUBSET {u, w:real^3} /\ w IN e /\ ~(u=w) ==> {u, w} INTER e SUBSET {w} `)
4489 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER (e:real^3->bool)`;`{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w}={} <=> ~(x=w)`;SET_RULE` {} SUBSET {w:real^3}`;]
4490 THEN POP_ASSUM MP_TAC
4491 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4492 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4493 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4494 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4495 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
4498 MP_TAC(SET_RULE`e INTER {ua, w:real^3} = {}==> ~(w IN e)`)
4500 THEN MP_TAC(SET_RULE`~({u, w} INTER e = {u, w:real^3}) ==> {u, w} INTER e PSUBSET {u, w} `)
4502 THEN MP_TAC(SET_RULE`{u, w} INTER e PSUBSET {u, w:real^3} /\ ~(w IN e) ==> {u, w} INTER e SUBSET {u} `)
4504 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER (e:real^3->bool)`;`{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u}={} <=> ~(x=u)`;SET_RULE` {} SUBSET {w:real^3}`;]
4506 THEN SUBGOAL_THEN `aff_ge {x} e INTER aff_ge {x} {ua, w} SUBSET aff_ge {x} {u} INTER aff_ge {x} {ua, w:real^3}`ASSUME_TAC
4508 POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
4509 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4510 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4511 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4512 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4513 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4514 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[];
4515 MRESA_TAC properties_inside_collinear1_fan[`x:real^3`;`u:real^3`;`w:real^3`]
4516 THEN POP_ASSUM MP_TAC
4517 THEN POP_ASSUM MP_TAC
4518 THEN SET_TAC[]]]]);;
4526 let inequality1_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real a:real.
4527 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
4530 ?(h:real). a <h /\ h<= &1
4531 /\ (!t:real. a <= t /\ t<h
4532 ==> (!(s:real). &0 <= s /\ s <= &1
4533 ==> s * inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))* norm( ((&1-a)%u + a %w)-((&1-t)%u+ t%w))< d ))`,
4535 THEN REWRITE_TAC[VECTOR_ARITH`((&1-a)%u + a %w)-((&1-t)%u+ t%w)=(t-a)%(u-w):real^3`;NORM_MUL]
4536 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
4538 THEN POP_ASSUM MP_TAC
4539 THEN DISCH_THEN (LABEL_TAC"A")
4540 THEN EXISTS_TAC`min (a+(h:real)*(d:real) *inv(norm(u-w:real^3))) (&1)`
4541 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
4542 ` (u:real^3)`] remark1_fan)
4544 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_gl_zero_fan)
4546 THEN MP_TAC(ISPECL[`(h:real)*(d:real)`;`inv(norm(u-w:real^3))`] REAL_LT_MUL)
4550 MP_TAC(ISPECL[`h:real`;`d:real`] REAL_LT_MUL)
4553 THEN REAL_ARITH_TAC;
4558 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
4560 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
4562 THEN MP_TAC(REAL_ARITH`(t:real)< min (a+(h:real) * (d:real) * inv (norm (u - w:real^3))) (&1)/\ min (a+h * d * inv (norm (u - w))) (&1)<= &1 /\ &0 <a /\ a <= t ==> &0 <= t /\ t <= &1 /\ &0 <= t-a /\ t - a<= &1/\ (t:real)-a < (h * d * inv (norm (u - w:real^3)))`)
4563 THEN ASM_REWRITE_TAC[REAL_ARITH`min (a+h * d * inv (norm (u - w))) (&1)<= &1`]
4565 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
4567 THEN REMOVE_THEN "A"(fun th -> MP_TAC(ISPEC`(&1-s)%v+s%((&1-t)%u+ t%w):real^3`th))
4569 THEN MP_TAC(ISPECL[`h:real`;`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`]REAL_LT_INV2)
4571 THEN MP_TAC(REAL_ARITH`&0 <h /\ (h:real)< norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)==> &0 <= norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`)
4573 THEN MP_TAC(ISPEC`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`REAL_LE_INV)
4575 THEN MP_TAC(ISPEC`t-a:real`REAL_ABS_REFL)
4577 THEN MP_TAC(ISPECL[`inv(norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;
4578 `inv(h:real)`;`t:real-a`;`(h * d * inv (norm (u - w:real^3)))`;]REAL_LT_MUL2)
4580 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
4582 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
4584 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
4585 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
4587 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)) * (t:real-a)`;`inv (h:real) * h * d * inv (norm (u - w:real^3))`;`norm (u - w:real^3)`]REAL_LT_RMUL)
4588 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B*C*D)*E=(A*B)*C*(D*E)`]
4589 THEN REDUCE_ARITH_TAC
4591 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;`(t:real-a)`;] REAL_LE_MUL)
4593 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t-a:real)`;`norm(u-w:real^3)`] REAL_LE_MUL)
4595 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1) \/ ~((s:real)= &1)`)
4597 POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4598 THEN REDUCE_ARITH_TAC
4599 THEN ASM_REWRITE_TAC[REAL_ARITH`A*B*C=(A*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`];
4600 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
4602 THEN MP_TAC(ISPECL[`s:real`;`&1`;`(inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t-a:real)) * norm(u-w:real^3)`;
4603 `d:real`]REAL_LT_MUL2)
4604 THEN REDUCE_ARITH_TAC
4606 THEN ASM_REWRITE_TAC[REAL_ARITH`A*d*B*C=A*(d*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`]]]]);;
4610 let bounded_convex1_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) w:real^3.
4611 FAN(x,V,E) /\ {v,u} IN E /\ {u,w} IN E
4612 ==> ?(h:real). &0< h /\ (!(y:real^3). y IN convex hull{v,u,w} ==> norm(y-x)<h )`,
4614 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3),w}` ASSUME_TAC
4615 THENL(*1*)[ SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4616 IN_INSERT; NOT_IN_EMPTY];
4617 MP_TAC(ISPEC`{(v:real^3),(u:real^3),w}`FINITE_IMP_COMPACT_CONVEX_HULL)
4618 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;])
4620 THEN ASSUME_TAC(ISPEC`x:real^3` norm_origin_fan )
4621 THEN ASSUME_TAC(SET_RULE`convex hull {(v:real^3), u,w} SUBSET (:real^3)`)
4622 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`(:real^3)`;`convex hull {(v:real^3),(u:real^3),w}`]CONTINUOUS_ON_SUBSET)
4624 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`convex hull {(v:real^3),(u:real^3),w}`]COMPACT_CONTINUOUS_IMAGE)
4626 THEN POP_ASSUM MP_TAC
4627 THEN REWRITE_TAC[COMPACT_EQ_BOUNDED_CLOSED;bounded;IMAGE;IN_ELIM_THM]
4628 THEN ONCE_REWRITE_TAC[TAUT`A/\B<=>B/\A`;]
4630 THEN POP_ASSUM MP_TAC
4631 THEN DISCH_THEN(LABEL_TAC"A")
4632 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u,w} /\
4633 lift (norm (v - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
4635 EXISTS_TAC`v:real^3`
4636 THEN SIMP_TAC[CONVEX_HULL_3; IN_ELIM_THM;]
4640 THEN REDUCE_VECTOR_TAC
4641 THEN REAL_ARITH_TAC;
4642 SUBGOAL_THEN `&0< (a:real)` ASSUME_TAC
4644 REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`lift (norm (v - (x:real^3)))`th))
4646 THEN POP_ASSUM MP_TAC
4647 THEN REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
4648 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
4649 ` (v:real^3)`] remark1_fan)
4651 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
4653 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
4654 THEN MP_TAC(REAL_ARITH`~(&0 =norm(v-x:real^3)) /\ &0 <= norm(v-x:real^3)==> &0 <norm(v-x:real^3)`)
4656 THEN POP_ASSUM MP_TAC
4657 THEN REAL_ARITH_TAC;
4658 EXISTS_TAC`&2 * a:real`
4662 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u,w} /\
4663 lift (norm (y - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
4665 EXISTS_TAC`y:real^3`
4666 THEN ASM_SIMP_TAC[];
4667 REMOVE_THEN "A"(fun th-> MP_TAC(ISPEC`lift (norm (y - x:real^3))`th))
4668 THEN ASM_REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
4670 THEN REAL_ARITH_TAC];
4673 THEN REAL_ARITH_TAC]]]]);;
4676 let inequaility2_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real a:real.
4677 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
4680 ?(h:real). a <h /\ h<= &1
4681 /\ (!t:real. a <= t /\ t<h
4682 ==> (!(s:real). &0 <= s /\ s <= &1
4683 ==> (norm(inv(norm((&1-s)%v+s%((&1-a)%u+ a%w)-x))%((&1-s)%v+s%((&1-a)%u+ a%w)-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%((&1-a)%u+ a%w)-x)))< d ))`,
4685 REWRITE_TAC[VECTOR_ARITH`A%B-C%B=(A-C)%B`;NORM_MUL]
4686 THEN REPEAT STRIP_TAC
4687 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
4688 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
4690 THEN POP_ASSUM MP_TAC
4691 THEN DISCH_THEN(LABEL_TAC"A")
4692 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
4694 THEN POP_ASSUM MP_TAC
4695 THEN DISCH_THEN(LABEL_TAC"B")
4696 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`w:real^3`]bounded_convex1_fan)
4698 THEN POP_ASSUM MP_TAC
4699 THEN DISCH_THEN(LABEL_TAC"C")
4700 THEN EXISTS_TAC`min (a+h*h*(inv (h'))* inv(norm(u-w:real^3))*d:real) (&1)`
4701 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
4702 ` (u:real^3)`] remark1_fan)
4704 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
4706 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
4707 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
4709 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
4711 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
4713 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
4715 THEN MP_TAC(REAL_ARITH`&0 <(h':real)==> ~(h'= &0)`)
4717 THEN MP_TAC(ISPEC`(h':real)`REAL_MUL_LINV)
4719 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LE_INV)
4721 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LT_INV)
4723 THEN MP_TAC(ISPEC`(h:real)`REAL_LT_INV)
4725 THEN MP_TAC(REAL_ARITH`&0 <inv (h:real)==> &0 <= inv(h)`)
4727 THEN MP_TAC(ISPEC`(h':real)`REAL_LT_INV)
4729 THEN MP_TAC(REAL_ARITH`&0 <inv (h':real)==> &0 <= inv(h')`)
4731 THEN MP_TAC(REAL_ARITH`&0 <a /\ a< &1==> &0 <= a/\ a <= &1`)
4735 MP_TAC(ISPECL[`(h:real)`;`inv (h':real) `]REAL_LT_MUL)
4737 THEN MP_TAC(ISPECL[`(h:real)`;`(h:real)*inv (h':real) `]REAL_LT_MUL)
4739 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real)`;`inv(norm(u-w:real^3))`]REAL_LT_MUL)
4741 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real) *inv(norm(u-w:real^3))`;`d:real`]REAL_LT_MUL)
4743 THEN POP_ASSUM MP_TAC
4744 THEN POP_ASSUM MP_TAC
4745 THEN FIND_ASSUM MP_TAC`a:real < &1 `
4746 THEN REAL_ARITH_TAC;(*1*)
4750 REAL_ARITH_TAC;(*2*)
4752 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3)`;`w:real^3`;`a:real`;` s:real`]expansion_convex_fan)
4754 THEN REMOVE_THEN "C"(fun th->MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`th))
4755 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4757 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3)` ASSUME_TAC
4759 ASM_TAC THEN SET_TAC[];(*3*)
4760 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
4761 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4763 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3`NORM_POS_LE)
4764 THEN MP_TAC(REAL_ARITH`~(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)= &0) /\ &0 <= norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)==> &0 <norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`)
4766 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_MUL_LINV)
4768 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_LE_INV)
4770 THEN MP_TAC(REAL_ARITH`(t:real)< min (a+h * h * inv h' * inv (norm (u - w)) * d) (&1)/\ min (a+h * h * inv h' * inv (norm (u - w)) * d) (&1)<= &1 /\ &0<a /\ a<=t ==> &0<= t-a /\ &0<= t /\ t<= &1/\ (t:real)-a< (h * h * inv h' * inv (norm (u - w:real^3)) * d) `)
4771 THEN ASM_REWRITE_TAC[REAL_ARITH`min (a+h * h * inv h' * inv (norm (u - w:real^3)) * d) (&1)<= &1`]
4773 THEN MP_TAC(ISPECL[`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3) `;
4774 `(h':real)`;`t-a:real`;`(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
4776 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0/\ &0<= &1`]
4777 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`((&1 - s) % v + s % ((&1 - a) % u + a % w):real^3)`th))
4778 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4779 THEN ASM_REWRITE_TAC[]
4781 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`]REAL_LT_INV2)
4783 THEN MP_TAC(ISPECL[`norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`;`t-a:real`]REAL_LE_MUL)
4785 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3))`;`inv(h:real)`;`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)*(t:real-a)`;`(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
4787 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
4788 THEN ASM_REWRITE_TAC[]
4790 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`th))
4791 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
4793 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_LT_INV2)
4795 THEN MP_TAC(ISPECL[`inv(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`;`norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)*(t-a:real)`]REAL_LE_MUL)
4797 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
4798 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
4800 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3))`;`inv(h:real)`;`inv(norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)*(t-a:real)`;`inv(h:real)*(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
4802 THEN MP_TAC(ISPECL[`norm (u - w:real^3)`;
4803 `inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)) *
4804 inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) *
4805 norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) *
4806 (t-a)`;`inv h * inv h * h' * h * h * inv h' * inv (norm (u - w:real^3)) * d`;]REAL_LT_LMUL)
4808 THEN POP_ASSUM MP_TAC
4809 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(B*C)*E*A*D`]
4810 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
4811 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
4812 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D=(A*B)*C*D`]
4813 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*(C*D)*E`]
4814 THEN ONCE_REWRITE_TAC[REAL_ARITH`(A*B*C)*D*E=A*B*(C*D)*E`]
4815 THEN ASM_REWRITE_TAC[]
4816 THEN REDUCE_ARITH_TAC
4817 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C)*D=A*B*(C*D)`]
4818 THEN REDUCE_ARITH_TAC
4819 THEN ASM_REWRITE_TAC[REAL_ARITH`((A*B)*C*D)*E=(A*C)*(B*D)*E`]
4820 THEN REDUCE_ARITH_TAC
4821 THEN REWRITE_TAC[REAL_ARITH`((A*B)*C)*D*E=(A*B)*(C*D)*E`]
4822 THEN ASSUME_TAC(ISPECL[`u:real^3`;`w:real^3`]NORM_SUB)
4823 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
4824 THEN MP_TAC(ISPECL[`t-a:real`;`w-u:real^3`]NORM_MUL)
4825 THEN MP_TAC(ISPEC`t-a:real`REAL_ABS_REFL)
4828 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
4829 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B)*C*D=C*A*(B*D)`]
4830 THEN REDUCE_ARITH_TAC
4831 THEN DISCH_THEN(LABEL_TAC"BA")
4832 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
4834 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3)` ASSUME_TAC
4837 THEN DISCH_THEN (LABEL_TAC"MA")
4839 THEN REMOVE_THEN"MA" MP_TAC
4840 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
4841 THEN ASM_REWRITE_TAC[];(*4*)
4842 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
4843 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4845 THEN MP_TAC(ISPECL[`norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`;`norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_SUB_INV)
4847 THEN ASM_REWRITE_TAC[REAL_ABS_ABS;REAL_ABS_DIV;REAL_ABS_MUL;REAL_ABS_NORM;real_div;REAL_INV_MUL;
4848 REAL_ARITH`(A*B*C)*D=A*C*(B*D)`]
4849 THEN REDUCE_ARITH_TAC
4850 THEN MP_TAC(ISPECL[`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`;`((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`]REAL_ABS_SUB_NORM)
4851 THEN REWRITE_TAC[VECTOR_ARITH`
4852 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)-((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)=s%(t-a)%(w-u) :real^3`]
4853 THEN ONCE_REWRITE_TAC[NORM_MUL]
4854 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
4857 THEN MP_TAC(ISPECL[`abs
4858 (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3) -
4859 norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x))`;`s * norm ((t-a) % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_RMUL)
4861 THEN REMOVE_THEN "BA" MP_TAC
4862 THEN POP_ASSUM MP_TAC
4863 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1)\/ ~((s:real) = &1)`)
4866 THEN REAL_ARITH_TAC;(*5*)
4868 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
4870 THEN ASSUME_TAC(ISPEC`((t-a) % (w - u):real^3)`NORM_POS_LE)
4871 THEN MP_TAC(ISPECL[`norm ((t-a) % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_MUL)
4873 THEN REPEAT STRIP_TAC
4874 THEN MP_TAC(ISPECL[`s:real`;`&1`;`norm ((t-a) % (w - u)) *
4875 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`;
4876 `d:real`]REAL_LT_MUL2)
4877 THEN REDUCE_ARITH_TAC
4878 THEN ASM_REWRITE_TAC[]
4879 THEN POP_ASSUM MP_TAC
4880 THEN POP_ASSUM MP_TAC
4881 THEN POP_ASSUM MP_TAC
4882 THEN REAL_ARITH_TAC]]]]]);;
4885 let exists_point_small_edges_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real a:real.
4886 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
4889 ?(h:real). a <h /\ h<= &1
4890 /\ (!t:real. a <= t /\ t<h
4891 ==> (!(s:real). &0 <= s /\ s <= &1
4892 ==> norm(inv(norm((&1-s)%v+s%((&1-a)%u+ a%w)-x))%((&1-s)%v+s%((&1-a)%u+ a%w)-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%((&1-t)%u+ t%w)-x))< d ))`,
4895 THEN MP_TAC(REAL_ARITH`&0< (d:real)==> &0< d/ &2`)
4897 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
4899 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`;` (d:real)/ &2`;`a:real`]inequaility2_not0_fan)
4901 THEN POP_ASSUM MP_TAC
4902 THEN DISCH_THEN (LABEL_TAC"A")
4903 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool) `;`(v:real^3)`;` (u:real^3)`;` (w:real^3)`;` (d:real)/ &2`;`a:real`]inequality1_not0_fan)
4905 THEN POP_ASSUM MP_TAC
4906 THEN DISCH_THEN (LABEL_TAC"B")
4907 THEN EXISTS_TAC`min (h:real) (h':real)`
4910 THEN REAL_ARITH_TAC;
4914 THEN REAL_ARITH_TAC;
4916 THEN MP_TAC(REAL_ARITH`t< min (h:real) (h':real)==> t< (h:real) /\ t< (h':real)`)
4918 THEN REMOVE_THEN"B" (fun th-> MP_TAC(ISPEC`t:real`th))
4920 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
4922 THEN POP_ASSUM MP_TAC
4923 THEN DISCH_THEN (LABEL_TAC"B")
4924 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
4926 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
4928 THEN POP_ASSUM MP_TAC
4929 THEN DISCH_THEN (LABEL_TAC"A")
4930 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
4931 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
4933 THEN MP_TAC(ISPECL[`s *
4934 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`;`(((&1 - a) % u + a % w) - ((&1 - t) % u + t % w)):real^3`]NORM_MUL)
4935 THEN REWRITE_TAC[REAL_ABS_MUL]
4936 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
4938 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`REAL_ABS_REFL)
4940 THEN REWRITE_TAC[REAL_ARITH`(A*B)*C=A*B*C`]
4942 THEN REMOVE_THEN"B"MP_TAC
4943 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
4944 THEN REWRITE_TAC[VECTOR_ARITH`(s * inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x))) %
4945 (((&1 - a) % u + a % w) - ((&1 - t) % u + t % w))= inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4946 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3`]
4949 THEN MP_TAC(ISPECL[`norm(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4950 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;`(d:real)/ &2`;
4952 (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4953 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4954 ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)`;`(d:real)/ &2`;
4957 THEN POP_ASSUM MP_TAC
4958 THEN REWRITE_TAC[REAL_ARITH`d / &2 + d/ &2 = d`]
4959 THEN MP_TAC(ISPECL[`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4960 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;
4961 `(inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4962 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4963 ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)`]NORM_TRIANGLE)
4964 THEN REWRITE_TAC[VECTOR_ARITH`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4965 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)+
4966 (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4967 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4968 ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)=(inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4969 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4970 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) `]
4971 THEN REAL_ARITH_TAC]]);;
4974 let separate1_sphere_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (v1:real^3) (u1:real^3) a:real.
4976 FAN(x,V,E) /\ {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
4977 /\ ~(coplanar{x,v,u,w})
4978 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
4979 /\ &0 < a /\ a < &1 /\
4980 aff_gt {x} {v, (&1 - a) % u + a % w} INTER
4981 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
4987 (!t:real. a<t /\ t<h
4988 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge {x} {v1, u1} INTER ballnorm_fan x={})`,
4990 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
4992 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
4994 THEN MRESA_TAC exist_close1_fan[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`w:real^3`;`(v1:real^3)`;` (u1:real^3)`;`a:real`]
4995 THEN POP_ASSUM MP_TAC
4996 THEN DISCH_THEN(LABEL_TAC"THA")
4997 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
4998 THEN POP_ASSUM MP_TAC
4999 THEN DISCH_THEN(LABEL_TAC"A" )
5000 THEN MRESA_TAC exists_point_small_edges_not0_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;`h:real`;`a:real`]
5001 THEN POP_ASSUM MP_TAC
5002 THEN DISCH_THEN(LABEL_TAC"B" )
5003 THEN EXISTS_TAC`min (a+((h'-a:real)/ &2)) (&1:real)`
5004 THEN ASM_REWRITE_TAC[]
5007 MP_TAC(REAL_ARITH`a< h':real==> &0< (h'-a)/ &2`)
5008 THEN ASM_REWRITE_TAC[]
5009 THEN FIND_ASSUM MP_TAC`a:real< &1`
5010 THEN REAL_ARITH_TAC;(*1*)
5014 THEN REAL_ARITH_TAC;(*2*)
5016 THEN REWRITE_TAC[EXTENSION]
5021 THEN REWRITE_TAC[EMPTY;IN_ELIM_THM]
5022 THEN SUBGOAL_THEN `!y1:real^3.
5023 y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x
5024 ==> ?y2:real^3. y2 IN aff_ge {x:real^3} {(v:real^3), ((&1 - a) % u + a % w:real^3)} INTER ballnorm_fan x /\
5025 dist (y1,y2)<(h:real)` ASSUME_TAC
5027 MP_TAC(REAL_ARITH`&0<a /\ a < &1 /\ a <(t:real)/\ a< h' /\ t < min (a+(h'-a:real)/ &2) (&1:real)==> &0<t /\ t< &1 /\ &0 <= t /\ t<= &1 /\ t< h'/\ &0<=a /\ a<= &1/\ a<=t`)
5029 THEN USE_THEN"A" (fun th-> MP_TAC(ISPEC`a:real`th))
5030 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
5033 THEN REPEAT STRIP_TAC
5034 THEN MRESA_TAC same_projective_sphere_gt_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;` (t:real) `;`(y1:real^3)`]
5035 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
5036 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5037 THEN MRESA_TAC AFF_GE_1_2[`(x:real^3)` ;` (v:real^3)`;`((&1 - a) % u + a % w:real^3) `;]
5038 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist]
5039 THEN MRESA_TAC expansion_convex_fan[`(v:real^3)`;` (u:real^3)`;`w:real^3`;`a:real`;` s:real`;]
5040 THEN MRESA_TAC origin_point_not_in_convex_fan[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`w:real^3`]
5041 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%((&1 - a) % u + a % w):real^3)` ASSUME_TAC
5044 THEN MATCH_MP_TAC MONO_NOT
5046 MP_TAC(ISPECL[`x:real^3`;`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`]imp_norm_not_zero_fan)
5047 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
5048 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
5050 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3`NORM_POS_LE)
5051 THEN MP_TAC(REAL_ARITH`~(&0 =norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)) /\ &0 <= norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)==> &0 <norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`)
5053 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_MUL_LINV)
5055 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_LE_INV)
5057 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) %
5058 ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) +x:real^3`
5063 EXISTS_TAC`&1 - inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) `
5064 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * (&1 - s)`
5065 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * (s)`
5066 THEN REWRITE_TAC[VECTOR_ARITH`A%(B%C + a%b-c)+c=(&1-A)%c+(A*B)%C+(A*a)%b:real^3`]
5067 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-A+A*(&1-C)+A*C= &1`]
5069 THEN MATCH_MP_TAC REAL_LE_MUL
5070 THEN ASM_REWRITE_TAC[]
5072 THEN REAL_ARITH_TAC;(*7*)
5073 REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`A-(B+A)=(--B):real^3`;NORM_NEG;NORM_MUL]
5074 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3))`REAL_ABS_REFL)
5076 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
5078 ASM_REWRITE_TAC[VECTOR_ARITH`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
5079 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) +
5081 (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) + x)=
5082 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
5083 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) -
5084 (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) ):real^3`]
5085 THEN REMOVE_THEN "B" (fun th-> MP_TAC(ISPEC`t:real`th))
5087 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
5089 THEN ASM_REWRITE_TAC[NORM_SUB]](*6*)](*5*);(*4*)
5090 POP_ASSUM (fun th->MP_TAC(ISPEC`x':real^3`th))
5091 THEN MP_TAC(SET_RULE` x' IN aff_gt {x} {v, (&1 - t) % u + t % w} INTER aff_ge {x} {v1, u1} INTER
5092 ballnorm_fan x ==> x' IN aff_ge {x} {v1, u1:real^3} INTER ballnorm_fan x
5093 /\ x' IN aff_gt {x} {v, (&1 - t) % u + t % w:real^3} INTER ballnorm_fan x`)
5094 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5095 THEN REPEAT STRIP_TAC
5096 THEN POP_ASSUM MP_TAC
5097 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
5099 THEN REPEAT STRIP_TAC
5100 THEN REMOVE_THEN "THA" (fun th-> MP_TAC(ISPECL[`y2:real^3`;`x':real^3`]th))
5101 THEN POP_ASSUM MP_TAC
5102 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5103 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5104 THEN SIMP_TAC[dist;NORM_SUB]
5105 THEN REAL_ARITH_TAC](*4*);(*3*)
5111 let fan_run_in_small11_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 u1:real^3 a:real.
5112 FAN(x,V,E) /\ {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
5113 /\ ~(coplanar{x,v,u,w})
5114 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5115 /\ &0 < a /\ a < &1 /\
5116 aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5117 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5120 ?t1:real. a < t1 /\ t1 <= &1
5121 /\ (!t:real. a< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={})`,
5124 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5126 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
5128 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
5129 THEN POP_ASSUM MP_TAC
5130 THEN DISCH_THEN (LABEL_TAC"BA")
5131 THEN MRESA_TAC separate1_sphere_not0_fan[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3)`;` (w:real^3)`;` (v1:real^3)`;`(u1:real^3)`;`a:real`]
5132 THEN POP_ASSUM MP_TAC
5133 THEN DISCH_THEN (LABEL_TAC"A")
5134 THEN REPEAT STRIP_TAC
5135 THEN MP_TAC(REAL_ARITH` a < &1 /\ a < h ==> a < min (h:real) (&1:real)`)
5137 THEN MP_TAC(REAL_ARITH` h <= &1==> min (h:real) (&1:real)<= &1`)
5139 THEN EXISTS_TAC`min (h:real) (&1:real)`
5140 THEN ASM_REWRITE_TAC[]
5141 THEN REPEAT STRIP_TAC
5142 THEN MP_TAC(REAL_ARITH` &0< a /\ a < t /\ t< min (h:real) (&1:real)==> t< h /\ t<= &1 /\ &0 <= t/\ &0<t /\ t< &1`)
5144 THEN REMOVE_THEN "A"(fun th-> MRESA1_TAC th `(t:real)`)
5145 THEN POP_ASSUM MP_TAC
5146 THEN DISCH_THEN (LABEL_TAC"A")
5147 THEN REMOVE_THEN "BA"(fun th-> MRESA1_TAC th `(t:real)`)
5148 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5149 THEN MRESA_TAC origin_is_not_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
5150 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
5155 THEN SUBGOAL_THEN`~(x=x':real^3)`ASSUME_TAC
5158 THEN POP_ASSUM MP_TAC
5159 THEN POP_ASSUM MP_TAC
5161 MRESA_TAC imp_norm_not_zero_fan[`x':real^3`;`x:real^3`]
5162 THEN ASSUME_TAC(ISPEC`x'-x:real^3`NORM_POS_LE)
5163 THEN MP_TAC(REAL_ARITH`~(norm(x'-x:real^3)= &0) /\ &0 <= norm(x'-x:real^3)==> &0 <norm(x'-x:real^3)`)
5165 THEN MRESA1_TAC REAL_LE_INV `norm(x'-x:real^3)`
5166 THEN MRESA1_TAC REAL_LT_INV `norm(x'-x:real^3)`
5167 THEN MRESA1_TAC REAL_MUL_LINV `norm(x'-x:real^3)`
5168 THEN MRESA_TAC scale_aff_ge_fan[`x:real^3`;`v1:real^3`;`u1:real^3`]
5169 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
5170 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
5171 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
5172 THEN SUBGOAL_THEN`inv (norm (x' - x)) % (x' - x) + x IN ballnorm_fan x:real^3->bool` ASSUME_TAC
5174 MRESA1_TAC REAL_ABS_REFL `inv(norm(x'-x:real^3))`
5175 THEN ASM_REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`B-(A+B)= --A:real^3`;NORM_NEG;NORM_MUL];
5182 let fan_run_in_small1_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 u1:real^3 a:real.
5183 FAN(x,V,E) /\ {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
5184 /\ ~(coplanar{x,v,u,w})
5185 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5186 /\ &0 < a /\ a < &1 /\
5187 aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5188 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5190 /\ (!s. &0 < s /\ s < a
5191 ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5192 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5195 (?t1:real. a < t1 /\ t1 <= &1
5196 /\ (!t:real. &0< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={}))`,
5198 THEN MRESA_TAC fan_run_in_small11_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`;`v1:real^3`;`u1:real^3`;`a:real`]
5199 THEN EXISTS_TAC`t1:real`
5200 THEN ASM_REWRITE_TAC[]
5202 THEN MP_TAC(REAL_ARITH`&0<a /\ a< t1==>((&0<t /\ t<t1) <=> (&0<t /\ t<a)\/ t=a \/ (a<t/\ t<t1:real))`)
5205 THEN ASM_TAC THEN SET_TAC[]);;
5207 let fan_run_in_small2_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3 a:real.
5208 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E
5209 /\ ~coplanar {x,v,u,w}
5210 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5212 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5213 {v | ?e. e IN E /\ v IN aff_ge {x} e} = {})
5214 /\ (!s. &0 < s /\ s < a
5215 ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5216 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5218 ==> ?t1. a < t1 /\ t1<= &1
5219 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
5223 THEN POP_ASSUM MP_TAC
5224 THEN POP_ASSUM MP_TAC
5225 THEN DISCH_THEN(LABEL_TAC"MAI MAI")
5226 THEN DISCH_THEN(LABEL_TAC"YEU EM")
5227 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
5228 THEN POP_ASSUM MP_TAC
5229 THEN DISCH_THEN (LABEL_TAC"A")
5230 THEN DISJ_CASES_TAC(SET_RULE`(?h:real. a<h /\ h<= &1/\ azim x v u w1=azim x v u ((&1-h)%u+h%w:real^3))\/ ~(?h:real. a<h /\ h<= &1 /\ azim x v u ((&1-h)%u+h%w:real^3)=azim x v u w1)`)
5234 THEN EXISTS_TAC`(h:real)`
5238 THEN REAL_ARITH_TAC;(*2*)
5242 THEN REAL_ARITH_TAC;(*3*)
5244 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
5246 THEN MP_TAC(REAL_ARITH`(t:real)< (h:real) /\ h <= &1 ==> t < &1`)
5248 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
5249 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5250 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5252 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5254 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
5260 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
5263 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5264 THEN MRESAL_TAC AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5265 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
5267 THEN POP_ASSUM MP_TAC
5268 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
5269 t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
5270 (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
5271 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
5273 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
5275 THEN MP_TAC(SET_RULE`
5276 t3 % ((&1 - t) % u + t % w) = (t1'-t1) % x + (t2'-t2) % v + t3' % w1:real^3
5277 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1'-t1) % x + (t2'-t2) % v + t3' % w1)`)
5278 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5279 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
5280 THEN REDUCE_VECTOR_TAC
5282 THEN FIND_ASSUM MP_TAC`t1' + t2' + t3' = &1:real`
5283 THEN FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
5285 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
5286 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
5288 THEN MP_TAC(SET_RULE`
5289 (t1'-t1) + (t2'-t2) + t3' = t3
5290 ==> (inv (t3))*((t1'-t1) + (t2'-t2) + t3') = (inv (t3))*t3`)
5291 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5292 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
5294 THEN EXISTS_TAC`inv t3 * (t1' - t1):real`
5295 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
5296 THEN EXISTS_TAC`inv t3 * t3':real`
5297 THEN ASM_REWRITE_TAC[]
5298 THEN MATCH_MP_TAC REAL_LE_MUL
5299 THEN ASM_REWRITE_TAC[]
5300 THEN MATCH_MP_TAC REAL_LE_INV
5302 THEN REAL_ARITH_TAC;(*5*)
5304 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5305 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5306 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
5307 THEN MRESA_TAC injective_azim_coplanar[`x:real^3`;` v:real^3`;` u:real^3`;` w:real^3`]
5308 THEN POP_ASSUM (fun th->MRESA_TAC th [`h:real`;`t:real`])
5310 THEN REAL_ARITH_TAC](*5*)(*4*);
5313 THEN ONCE_REWRITE_TAC[NOT_EXISTS_THM]
5314 THEN DISCH_THEN(LABEL_TAC"B")
5315 THEN EXISTS_TAC`&1:real`
5316 THEN ASM_REWRITE_TAC[REAL_ARITH `&1<= &1`]
5317 THEN REPEAT STRIP_TAC
5318 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
5320 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
5321 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5322 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5324 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5326 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
5331 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
5334 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5335 THEN MRESAL_TAC AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5336 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
5338 THEN POP_ASSUM MP_TAC
5339 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
5340 t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
5341 (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
5342 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
5344 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
5346 THEN MP_TAC(SET_RULE`
5347 t3 % ((&1 - t) % u + t % w) = (t1'-t1) % x + (t2'-t2) % v + t3' % w1:real^3
5348 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1'-t1) % x + (t2'-t2) % v + t3' % w1)`)
5349 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5350 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
5351 THEN REDUCE_VECTOR_TAC
5353 THEN FIND_ASSUM MP_TAC`t1' + t2' + t3' = &1:real`
5354 THEN FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
5356 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
5357 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
5359 THEN MP_TAC(SET_RULE`
5360 (t1'-t1) + (t2'-t2) + t3' = t3
5361 ==> (inv (t3))*((t1'-t1) + (t2'-t2) + t3') = (inv (t3))*t3`)
5362 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5363 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
5365 THEN EXISTS_TAC`inv t3 * (t1' - t1):real`
5366 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
5367 THEN EXISTS_TAC`inv t3 * t3':real`
5368 THEN ASM_REWRITE_TAC[]
5369 THEN MATCH_MP_TAC REAL_LE_MUL
5370 THEN ASM_REWRITE_TAC[]
5371 THEN MATCH_MP_TAC REAL_LE_INV
5373 THEN REAL_ARITH_TAC;(*3*)
5374 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5375 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5376 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
5377 THEN REMOVE_THEN "B"(fun th -> MRESAL1_TAC th `t:real`[DE_MORGAN_THM; REAL_ARITH`~(A<B)<=> B<A\/ B=A`])
5378 THENL(*4*)[REMOVE_THEN"YEU EM"(fun th-> MRESA1_TAC th `t:real`)
5379 THEN POP_ASSUM MP_TAC
5380 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5381 THEN POP_ASSUM MP_TAC
5382 THEN FIND_ASSUM MP_TAC `{v,w1:real^3} IN E`
5384 REMOVE_THEN"MAI MAI" MP_TAC
5385 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
5386 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5387 THEN POP_ASSUM MP_TAC
5388 THEN FIND_ASSUM MP_TAC `{v,w1:real^3} IN E`
5391 THEN REAL_ARITH_TAC](*4*)];
5402 let fan_run_in_small3_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3 a:real.
5403 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {u,w1} IN E
5404 /\ ~coplanar {x,v,u,w} /\ sigma_fan x V E u w=v
5405 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5407 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5408 {v | ?e. e IN E /\ v IN aff_ge {x} e} = {})
5409 /\ (!s. &0 < s /\ s < a
5410 ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5411 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5413 ==> ?t1. a < t1 /\ t1 <= &1
5414 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {u,w1}={})`,
5416 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
5417 THEN POP_ASSUM MP_TAC
5418 THEN DISCH_THEN (LABEL_TAC"A")
5419 THEN EXISTS_TAC`&1:real`
5420 THEN ASM_REWRITE_TAC[REAL_ARITH`&1<= &1`]
5421 THEN REPEAT STRIP_TAC
5422 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t /\ ~(t= &0)`)
5424 THEN MP_TAC(REAL_ARITH`t< &1 ==>t<= &1`)
5426 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
5427 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5428 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5430 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5432 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
5436 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
5438 THEN SUBGOAL_THEN `x' IN (aff_ge {x,u} {w1}:real^3->bool)`ASSUME_TAC
5441 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
5442 THEN MRESAL_TAC AFF_GE_2_1[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
5444 THEN EXISTS_TAC`t1':real`
5445 THEN EXISTS_TAC`t2':real`
5446 THEN EXISTS_TAC`t3':real`
5447 THEN ASM_REWRITE_TAC[];
5449 THEN ASM_REWRITE_TAC[]
5451 THEN MRESA_TAC inequality3_aim_in_convex_fan
5452 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
5453 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
5454 THEN POP_ASSUM(fun th-> MRESA_TAC th [`t1:real`;`t2:real`;`t3:real`])
5455 THEN POP_ASSUM MP_TAC
5456 THEN POP_ASSUM MP_TAC
5457 THEN DISCH_THEN(LABEL_TAC"BE")
5458 THEN DISCH_THEN(LABEL_TAC"YEU")
5459 THEN SUBGOAL_THEN`~collinear {x, u, x':real^3}`ASSUME_TAC
5461 MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
5462 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
5463 THEN ASM_REWRITE_TAC[collinear_fan;]
5464 THEN POP_ASSUM MP_TAC
5465 THEN MATCH_MP_TAC MONO_NOT
5466 THEN REWRITE_TAC[coplanar;aff; AFFINE_HULL_2;IN_ELIM_THM]
5468 THEN EXISTS_TAC`x:real^3`
5469 THEN EXISTS_TAC`v:real^3`
5470 THEN EXISTS_TAC`u:real^3`
5471 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5473 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5477 THEN REDUCE_ARITH_TAC
5478 THEN VECTOR_ARITH_TAC;
5480 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5482 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5486 THEN REDUCE_ARITH_TAC
5487 THEN VECTOR_ARITH_TAC;
5488 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5490 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5494 THEN REDUCE_ARITH_TAC
5495 THEN VECTOR_ARITH_TAC;
5496 SUBGOAL_THEN`((&1 - t) % u + t % w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5498 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5499 THEN REMOVE_ASSUM_TAC
5500 THEN REMOVE_ASSUM_TAC
5501 THEN REMOVE_ASSUM_TAC
5502 THEN POP_ASSUM MP_TAC
5503 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
5505 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
5507 THEN ASM_REWRITE_TAC[]
5508 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) = u' % x + v' % u
5509 <=>t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u:real^3`]
5511 THEN MP_TAC(SET_RULE`
5512 t3 % ((&1 - t) % u + t % w) = (u'-t1) % x -t2 % v+v' % u
5513 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w) ) = (inv (t3))%((u'-t1) % x -t2 % v+v' % u):real^3`)
5514 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5515 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B-C+D)=A%B-A%C+A%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
5516 THEN REDUCE_VECTOR_TAC
5518 THEN EXISTS_TAC`(inv t3 * (u' - t1)):real`
5519 THEN EXISTS_TAC`-- (inv t3 * t2):real`
5520 THEN EXISTS_TAC`(inv t3 * v'):real`
5521 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A+(--b)%C+d=A-b%C+d`;REAL_ARITH`inv t3 * (u' - t1') + --(inv t3 * t2) + inv t3 * v'=inv t3 * (t3+(u'+v') - (t1'+ t2+t3))`;REAL_ARITH`A+ &1- &1=A`];(*7*)
5524 THEN SET_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
5526 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
5528 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
5529 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
5530 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`;`x':real^3`;]
5531 THEN REMOVE_THEN"BE" MP_TAC
5532 THEN REMOVE_THEN"YEU" MP_TAC
5533 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
5534 THEN FIND_ASSUM MP_TAC`(sigma_fan x V E u w = (v:real^3))`
5536 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
5537 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge u V E = {w:real^3}) \/ ~(set_of_edge u V E = {w})`)
5539 FIND_ASSUM MP_TAC`w1 IN set_of_edge (u:real^3) V E`
5540 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th);IN_SING])
5542 THEN ASM_REWRITE_TAC[]
5543 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
5544 THEN REAL_ARITH_TAC;(*4*)
5546 DISJ_CASES_TAC(SET_RULE`(w1:real^3)=w \/ ~((w1:real^3)=w)`)
5549 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
5550 THEN REAL_ARITH_TAC;
5551 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`]
5552 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
5553 THEN POP_ASSUM MP_TAC
5554 THEN REAL_ARITH_TAC]]]];
5562 let fan_run_in_small_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 w1:real^3 a:real.
5563 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v1,w1} IN E
5564 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5565 /\ sigma_fan x V E u w = v
5567 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5568 {v | ?e. e IN E /\ v IN aff_ge {x} e} = {})
5569 /\ (!s. &0 < s /\ s < a
5570 ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5571 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5575 ?t1:real. a<t1 /\ t1<= &1
5576 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,w1}={})`,
5579 (let lem=prove(`!x v v1. aff_ge {x} {v1, v}=aff_ge {x} {v, v1}`,
5581 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
5585 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
5586 THEN DISJ_CASES_TAC(SET_RULE`(v1=v)\/ ~(v1=v:real^3)`)
5588 MRESA_TAC fan_run_in_small2_not0_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v1:real^3`;`u:real^3`;` w:real^3`;`w1:real^3`;`a:real`];
5590 DISJ_CASES_TAC(SET_RULE`(v1=u)\/ ~(v1=u:real^3)`)
5592 MRESA_TAC fan_run_in_small3_not0_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` v1:real^3`;` w:real^3`;`w1:real^3`;`a:real`];
5593 DISJ_CASES_TAC(SET_RULE`(w1=v)\/ ~(w1=v:real^3)`)
5595 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
5596 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
5598 THEN MRESA_TAC fan_run_in_small2_not0_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w1:real^3`;`u:real^3`;` w:real^3`;`v1:real^3`;`a:real`]
5599 THEN EXISTS_TAC`t1:real`
5600 THEN ASM_REWRITE_TAC[lem];
5601 DISJ_CASES_TAC(SET_RULE`(w1=u)\/ ~(w1=u:real^3)`)
5603 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
5604 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
5606 THEN MRESA_TAC fan_run_in_small3_not0_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` w1:real^3`;` w:real^3`;`v1:real^3`;`a:real`]
5607 THEN EXISTS_TAC`t1:real`
5608 THEN ASM_REWRITE_TAC[lem];
5609 SUBGOAL_THEN`{v,u} INTER {v1,w1:real^3}={}` ASSUME_TAC
5613 MRESA_TAC fan_run_in_small1_not0_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`;`v1:real^3`;`w1:real^3`;`a:real`]]]]]]));;
5616 let fan_run1_in_small_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) (E':(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5617 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ E' SUBSET E
5618 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5619 /\ sigma_fan x V E u w = v
5621 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5622 {v | ?e. e IN E /\ v IN aff_ge {x} e} = {})
5623 /\ (!s. &0 < s /\ s < a
5624 ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5625 {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5628 ?h:real. a<h /\ h<= &1
5629 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} INTER {v | ?e. e IN E' /\ v IN aff_ge {x} e}={})`,
5632 THEN MRESA_TAC set_edges_is_finite_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
5633 THEN MRESA_TAC FINITE_SUBSET [`(E':(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`]
5634 THEN ABBREV_TAC`n=CARD (E':(real^3->bool)->bool)`
5635 THEN REPEAT(POP_ASSUM MP_TAC)
5636 THEN SPEC_TAC (`(E':(real^3->bool)->bool)`,`(E':(real^3->bool)->bool)`)
5637 THEN SPEC_TAC (`n:num`,`n:num`)
5641 THEN MP_TAC(ISPECL[`E':(real^3->bool)->bool`]CARD_EQ_0)
5643 THEN EXISTS_TAC`a+ (&1-a:real) / &2`
5644 THEN MP_TAC(REAL_ARITH`&0<a /\ a < &1 ==> a< a+ (&1-a:real) / &2/\ a+ (&1-a:real) / &2 <= &1`)
5646 THEN ASM_SET_TAC[];(*1*)
5649 THEN POP_ASSUM MP_TAC
5650 THEN DISCH_THEN (LABEL_TAC "A")
5651 THEN REPEAT STRIP_TAC
5652 THEN MP_TAC(ISPEC`(E':(real^3->bool)->bool)` CHOOSE_SUBSET)
5654 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`n:num `th))
5655 THEN REWRITE_TAC[ARITH_RULE `n:num <= SUC n`; HAS_SIZE]
5657 THEN MP_TAC(SET_RULE` t SUBSET E' /\ E' SUBSET E ==> (t:(real^3->bool)->bool) SUBSET E`)
5659 THEN REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`(t:(real^3->bool)->bool)`th))
5661 THEN POP_ASSUM MP_TAC
5662 THEN DISCH_THEN(LABEL_TAC"YEU")
5663 THEN SUBGOAL_THEN `~((E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)= {})` ASSUME_TAC
5666 THEN MP_TAC(SET_RULE`(E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)={} /\ t SUBSET E' ==> t= E'`)
5668 THEN FIND_ASSUM MP_TAC`CARD (t:(real^3->bool)->bool)=n`
5669 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
5670 THEN ASM_REWRITE_TAC[]
5671 THEN ARITH_TAC;(*2*)
5672 SUBGOAL_THEN`?e. e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)` ASSUME_TAC
5678 THEN MP_TAC(SET_RULE`e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)/\
5679 (E':(real^3->bool)->bool) SUBSET (E:(real^3->bool)->bool) /\ t SUBSET E' ==> e IN E'/\ e IN E/\ ~(e IN t) /\ {e} UNION t SUBSET E'`)
5681 THEN MP_TAC(ISPECL [`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`(E':(real^3->bool)->bool)`] FINITE_SUBSET)
5683 THEN ASSUME_TAC(SET_RULE`e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
5684 THEN MP_TAC(ISPECL[`e:real^3->bool`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;]CARD_DELETE)
5686 THEN MP_TAC(SET_RULE `e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)
5687 ==> ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e PSUBSET {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
5689 THEN MP_TAC(ISPECL[`({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))DELETE e`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`]CARD_PSUBSET)
5690 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5691 THEN FIND_ASSUM MP_TAC`FINITE ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`
5693 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5695 THEN MP_TAC(ARITH_RULE`CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) < CARD ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))
5696 /\ CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) = CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))-1
5697 <=>CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) +1= CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`)
5698 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5699 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
5700 THEN REWRITE_TAC[ARITH_RULE`A=A`; ]
5701 THEN MP_TAC(SET_RULE`~(e IN t)==>({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e=t`)
5703 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5704 THEN FIND_ASSUM MP_TAC`(CARD (E':(real^3->bool)->bool)=SUC n)`
5705 THEN REWRITE_TAC[ARITH_RULE`SUC n=(n:num) +1`]
5707 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
5709 THEN MP_TAC(ISPECL[`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`E':(real^3->bool)->bool`]CARD_SUBSET_EQ)
5710 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
5712 THEN POP_ASSUM MP_TAC
5713 THEN DISCH_THEN(LABEL_TAC"MA")
5714 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
5716 THEN MRESA_TAC fan_run_in_small_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`;`v':real^3`;`w':real^3`;`a:real`]
5717 THEN POP_ASSUM MP_TAC
5718 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
5719 THEN POP_ASSUM MP_TAC
5722 THEN POP_ASSUM MP_TAC
5723 THEN DISCH_THEN(LABEL_TAC"BE")
5724 THEN EXISTS_TAC` min (h:real) (t1:real)`
5728 THEN REAL_ARITH_TAC;(*4*)
5733 THEN REAL_ARITH_TAC;(*5*)
5735 THEN REMOVE_THEN "MA" MP_TAC
5737 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
5738 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION; INTER;]
5742 ASM_REWRITE_TAC[IN_SING]
5743 THEN MP_TAC(REAL_ARITH`s< min h t1==> s<h /\ s<t1`)
5750 THEN ASM_REWRITE_TAC[]
5751 THEN REMOVE_THEN "BE"(fun th-> MRESA1_TAC th `s:real`)
5755 THEN ASM_REWRITE_TAC[]
5756 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th `s:real`)
5757 THEN ASM_SET_TAC[]];
5766 let cut_in_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5767 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
5768 /\ sigma_fan x V E u w = v
5770 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
5772 /\ ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
5775 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
5776 THEN REWRITE_TAC[fan80]
5778 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
5779 THEN ABBREV_TAC`s1={h:real| &0< h/\ h<= &1 /\
5780 ~(aff_gt{x} {v,(&1-h)%u+ h % w:real^3} INTER {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e}={})}`
5781 THEN SUBGOAL_THEN`(a:real) IN (s1:real->bool)` ASSUME_TAC
5783 POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM]);
5785 MP_TAC(SET_RULE`(a:real) IN (s1:real->bool)==> ~(s1={})`)
5787 THEN SUBGOAL_THEN`(?b. !x:real. x IN s1 ==> b <= x)`ASSUME_TAC
5790 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5791 THEN POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM])
5792 THEN REAL_ARITH_TAC;
5793 MRESA1_TAC INF`s1:real->bool`
5794 THEN ABBREV_TAC`b= inf (s1:real->bool)`
5795 THEN SUBGOAL_THEN`b<= &1` ASSUME_TAC
5796 THENL(*3*)[POP_ASSUM MP_TAC
5797 THEN POP_ASSUM MP_TAC
5798 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
5800 THEN REAL_ARITH_TAC;(*3*)
5802 SUBGOAL_THEN`~(?s. &0 < s /\ s < b
5803 /\ ~( aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5804 {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e} =
5806 THENL(*4*)[STRIP_TAC
5807 THEN SUBGOAL_THEN`s IN (s1:real->bool)` ASSUME_TAC
5808 THENL(*5*)[ EXPAND_TAC"s1"
5809 THEN REWRITE_TAC[IN_ELIM_THM]
5810 THEN ASM_REWRITE_TAC[]
5811 THEN ASM_TAC THEN REAL_ARITH_TAC;(*5*)
5813 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5814 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5815 THEN POP_ASSUM (fun th->MP_TAC(ISPEC`s:real` th))
5816 THEN DISCH_THEN (LABEL_TAC"DICH")
5817 THEN REPEAT STRIP_TAC
5818 THEN REMOVE_THEN"DICH" MP_TAC
5819 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5820 THEN POP_ASSUM MP_TAC
5821 THEN REAL_ARITH_TAC];(*4*)
5823 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM;IMP_IMP]
5825 THEN MRESA_TAC fan_run_in_small_is_not_meet_xfan [`x:real^3`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;`u:real^3`;`w:real^3`]
5826 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h <= x))`ASSUME_TAC
5829 THEN DISCH_THEN(LABEL_TAC"A")
5831 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
5833 THEN ASM_REWRITE_TAC[]
5834 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*5*)
5837 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
5839 THEN SUBGOAL_THEN`&0<b:real`ASSUME_TAC
5844 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5845 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5846 THEN POP_ASSUM (fun th->MP_TAC(ISPEC`h:real` th))
5847 THEN DISCH_THEN (LABEL_TAC"DICH")
5848 THEN REPEAT STRIP_TAC
5849 THEN REMOVE_THEN"DICH" MP_TAC
5850 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5851 THEN POP_ASSUM MP_TAC
5852 THEN REAL_ARITH_TAC;(*6*)
5853 MRESA_TAC not_cut_inside_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3` ;`b:real`]
5854 THEN POP_ASSUM MP_TAC
5855 THEN DISJ_CASES_TAC(REAL_ARITH`(b:real)< &1\/ &1 <= b`)
5859 THEN MRESAL_TAC fan_run1_in_small_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`b:real`][SET_RULE`A SUBSET A`]
5860 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h' <= x))`ASSUME_TAC
5863 THEN DISCH_THEN(LABEL_TAC"A")
5865 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
5867 THEN ASM_REWRITE_TAC[]
5868 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*8*)
5870 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
5872 THEN SUBGOAL_THEN `h':real <= b`ASSUME_TAC
5873 THENL(*9*)[POP_ASSUM MP_TAC
5874 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5875 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5876 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5877 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5878 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5879 THEN POP_ASSUM (fun th->MP_TAC(ISPEC`h':real` th))
5880 THEN REWRITE_TAC[];(*9*)
5882 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5883 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC](*9*)](*8*);(*7*)
5886 THEN MP_TAC(REAL_ARITH`&1<=b /\ b<= &1==> b= &1`) THEN RESA_TAC
5887 THEN POP_ASSUM MP_TAC
5888 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5889 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5890 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5891 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5892 THEN REMOVE_ASSUM_TAC
5893 THEN POP_ASSUM (fun th->MP_TAC(ISPEC`a:real` th))
5895 THEN POP_ASSUM MP_TAC
5896 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5897 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5898 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5899 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5900 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC]]]]]]]);;
5906 let DHVFGBC=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5907 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
5908 /\ sigma_fan x V E u w = v
5910 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
5912 /\ ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
5913 ==> a= &1 /\ independent {v - x, u - x, ((&1 - a) % u + a % w) - x}`,
5914 MESON_TAC[independent_run_edges_fan;cut_in_edges_fan]);;
5917 let not_cut_in_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5918 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
5919 /\ sigma_fan x V E u w = v
5921 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
5923 ==> (aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})`,
5926 THEN DISJ_CASES_TAC(SET_RULE`(?a. &0< a /\ a< &1 /\ ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})) \/ (!a. &0< a /\ a< &1 ==> (aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e}={})) `)
5930 THEN POP_ASSUM MP_TAC
5931 THEN DISCH_THEN(LABEL_TAC"EM BE")
5932 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
5933 THEN REWRITE_TAC[fan80]
5935 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
5936 THEN ABBREV_TAC`s1={h:real| &0< h/\ h< &1 /\
5937 ~(aff_gt{x} {v,(&1-h)%u+ h % w:real^3} INTER {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e}={})}`
5938 THEN SUBGOAL_THEN`(a':real) IN (s1:real->bool)` ASSUME_TAC
5940 POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM]);
5941 MP_TAC(SET_RULE`(a':real) IN (s1:real->bool)==> ~(s1={})`)
5943 THEN SUBGOAL_THEN`(?b. !x:real. x IN s1 ==> b <= x)`ASSUME_TAC
5944 THENL(*2*)[EXISTS_TAC`&0`
5945 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5946 THEN POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM])
5947 THEN REAL_ARITH_TAC;(*2*)
5948 MRESA1_TAC INF`s1:real->bool`
5949 THEN ABBREV_TAC`b= inf (s1:real->bool)`
5950 THEN SUBGOAL_THEN`b< &1` ASSUME_TAC
5953 THEN POP_ASSUM MP_TAC
5954 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a':real`)
5956 THEN REAL_ARITH_TAC;(*3*)
5957 SUBGOAL_THEN`~(?s. &0 < s /\ s < b
5958 /\ ~( aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5959 {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e} =
5963 THEN SUBGOAL_THEN`s IN (s1:real->bool)` ASSUME_TAC
5964 THENL(*5*)[EXPAND_TAC"s1"
5965 THEN REWRITE_TAC[IN_ELIM_THM]
5966 THEN ASM_REWRITE_TAC[]
5967 THEN ASM_TAC THEN REAL_ARITH_TAC;(*5*)
5969 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5970 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5971 THEN POP_ASSUM (fun th->MP_TAC(ISPEC`s:real` th))
5972 THEN DISCH_THEN (LABEL_TAC"DICH")
5973 THEN REPEAT STRIP_TAC
5974 THEN REMOVE_THEN"DICH" MP_TAC
5975 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5976 THEN POP_ASSUM MP_TAC
5977 THEN REAL_ARITH_TAC];(*4*)
5980 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM;IMP_IMP]
5982 THEN MRESA_TAC fan_run_in_small_is_not_meet_xfan [`x:real^3`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;`u:real^3`;`w:real^3`]
5983 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h <= x))`ASSUME_TAC
5984 THENL(*5*)[POP_ASSUM MP_TAC
5985 THEN DISCH_THEN(LABEL_TAC"A")
5987 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
5989 THEN ASM_REWRITE_TAC[]
5990 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*5*)
5993 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
5995 THEN SUBGOAL_THEN`&0<b:real`ASSUME_TAC
5998 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5999 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6000 THEN POP_ASSUM (fun th->MP_TAC(ISPEC`h:real` th))
6001 THEN DISCH_THEN (LABEL_TAC"DICH")
6002 THEN REPEAT STRIP_TAC
6003 THEN REMOVE_THEN"DICH" MP_TAC
6004 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
6005 THEN POP_ASSUM MP_TAC
6006 THEN REAL_ARITH_TAC;(*6*)
6007 MRESA_TAC not_cut_inside_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3` ;`b:real`]
6008 THEN MRESAL_TAC fan_run1_in_small_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`b:real`][SET_RULE`A SUBSET A`]
6009 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h' <= x))`ASSUME_TAC
6012 THEN DISCH_THEN(LABEL_TAC"A")
6014 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
6016 THEN ASM_REWRITE_TAC[]
6017 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*7*)
6019 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
6021 THEN SUBGOAL_THEN `h':real <= b`ASSUME_TAC
6022 THENL(*8*)[POP_ASSUM MP_TAC
6023 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6024 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6025 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6026 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6027 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6028 THEN POP_ASSUM (fun th->MP_TAC(ISPEC`h':real` th))
6032 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6033 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC]]]]]]]];
6035 POP_ASSUM (fun th-> MRESA1_TAC th`a:real`)]);;