1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
5 (* Author: Hoang Le Truong *)
7 (* ========================================================================== *)
12 module Fully_surrounded = struct
18 open Hypermap_of_fan;;
22 open Hypermap_of_fan;;
32 (* ========================================================================== *)
34 (* ========================================================================== *)
37 let fan81=new_definition`fan81 (x:real^3,(V:real^3->bool),(E:(real^3->bool)->bool)):bool<=>(!v:real^3 u:real^3. {v,u} IN E ==> azim_fan x V E v u <pi)`;;
39 let fan80=new_definition`fan80 (x:real^3,(V:real^3->bool),(E:(real^3->bool)->bool)):bool<=>(!v:real^3 u:real^3. {v,u} IN E ==> &0< azim x v u (sigma_fan x V E v u) /\ azim x v u (sigma_fan x V E v u) <pi)`;;
44 let dartset_fully_surrounded_is_non_isolated_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
46 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
47 ==> d_fan(x,V,E)=d1_fan(x,V,E)`,
49 THEN MRESA_TAC fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
50 THEN ASM_REWRITE_TAC[d_fan;]
54 let properties_of_elements_in_face_fully_surroundedfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
56 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
57 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
59 ==> {pr2 y, pr3 y} IN E`,
60 REPEAT GEN_TAC THEN STRIP_TAC
61 THEN MRESA_TAC face_subset_dart_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
62 THEN MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d_fan (x,V,E)==> y IN d_fan (x,V,E)`)
65 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
66 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
68 THEN ASM_REWRITE_TAC[pr2;pr3]);;
74 let properties_fully_surrounded=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
75 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
76 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
77 ==> ~coplanar {x,v,u,w}`,
80 THEN REWRITE_TAC[SET_RULE`{x,v,u,w}={x,u,w,v}`]
82 THEN FIND_ASSUM MP_TAC`{v,u} IN (E:(real^3->bool)->bool)`
83 THEN REWRITE_TAC[SET_RULE`{v,u}={u,v}`]
85 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
87 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
89 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
91 THEN REAL_ARITH_TAC);;
98 let exists_edge_fully_surround_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) w:real^3.
100 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
101 ==> ?v. {w,v} IN E /\ v IN V`,
103 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)
104 THEN SUBGOAL_THEN`~(set_of_edge (w:real^3) V E={})`ASSUME_TAC
105 THENL[ POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC "YEU") THEN STRIP_TAC THEN REMOVE_THEN "YEU" MP_TAC
106 THEN ASM_REWRITE_TAC[CARD_CLAUSES] THEN ARITH_TAC;
108 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?v. v IN A`; set_of_edge;IN_ELIM_THM]]);;
113 let nonsetedge_fully_surround_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
114 (!v. v IN V==>CARD (set_of_edge v V E) >1)/\ FAN(x,V,E)
117 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[]
118 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[FAN;fan1] THEN STRIP_TAC THEN ASSUME_TAC(th))
119 THEN FIND_ASSUM MP_TAC(`~((V:real^3->bool) SUBSET {})`)
120 THEN REWRITE_TAC[SET_RULE`~(V SUBSET {})<=> ?w. w IN V`]
122 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
123 THEN ASM_TAC THEN SET_TAC[]);;
125 let v_subset_xfan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool).
126 FAN(x,V,E) /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
127 ==> V SUBSET xfan(x,V,E)`,
128 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
129 THEN REPEAT STRIP_TAC
130 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` x':real^3`]
131 THEN EXISTS_TAC`{x',v:real^3}`
132 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` v:real^3`;`x':real^3`]
133 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
134 THEN ASM_TAC THEN SET_TAC[IN]);;