1 (* ========================================================================== *)
\r
2 (* FLYSPECK - BOOK FORMALIZATION *)
\r
4 (* Chapter: Tame Hypermap *)
\r
5 (* Author: Alexey Solovyev *)
\r
6 (* Date: 2013-01-22 *)
\r
7 (* JGTDEBU: general properties of a contravening packing *)
\r
8 (* ========================================================================== *)
\r
10 needs "fan/hypermap_iso-compiled.hl";;
\r
11 needs "tame/TameGeneral.hl";;
\r
14 module Jgtdebu = struct
\r
16 parse_as_infix("iso",(24,"right"));;
\r
20 open Hypermap_and_fan;;
\r
23 let contravening_imp_conforming = prove(`!V. contravening V ==>
\r
24 conforming_fan (vec 0,V,ESTD V)`,
\r
25 REPEAT STRIP_TAC THEN
\r
26 MATCH_MP_TAC Conforming.PIIJBJK THEN
\r
27 MP_TAC (SPEC `V:real^3->bool` Tame_general.CONTRAVENING_FAN) THEN
\r
28 ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
29 ASM_REWRITE_TAC[Planarity.fan80] THEN
\r
30 CONJ_TAC THEN REPEAT GEN_TAC THEN REPEAT DISCH_TAC THENL
\r
32 MATCH_MP_TAC (ARITH_RULE `a >= 3 ==> a > 1`) THEN
\r
33 MATCH_MP_TAC SURROUNDED_IMP_CARD_SET_OF_EDGE_GE_3 THEN
\r
34 ASM_SIMP_TAC[CONTRAVENING_IMP_SURROUNDED];
\r
37 SUBGOAL_THEN `v,u IN dart_of_fan (V,ESTD V)` ASSUME_TAC THENL
\r
39 REWRITE_TAC[dart_of_fan; IN_UNION; IN_ELIM_THM] THEN DISJ2_TAC THEN
\r
40 EXISTS_TAC `v:real^3` THEN EXISTS_TAC `u:real^3` THEN ASM_REWRITE_TAC[];
\r
43 ASM_SIMP_TAC[GSYM CONTRAVENING_IMP_AZIM_DART_EQ_AZIM; AZIM_DART_POS] THEN
\r
44 MP_TAC (SPEC `V:real^3->bool` CONTRAVENING_IMP_FULLY_SURROUNDED) THEN
\r
45 ASM_SIMP_TAC[fully_surrounded]);;
\r
49 let JGTDEBU1 = prove(`!V. contravening V
\r
50 ==> planar_hypermap (hypermap_of_fan (V, ESTD V))`,
\r
51 REPEAT STRIP_TAC THEN
\r
52 MP_TAC (SPEC `V:real^3->bool` Tame_general.CONTRAVENING_FAN) THEN
\r
53 ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
54 MP_TAC (SPECL [`V:real^3->bool`; `ESTD V`] fan_hypermaps_iso) THEN
\r
55 ASM_REWRITE_TAC[] THEN DISCH_THEN (MP_TAC o MATCH_MP iso_planar) THEN
\r
56 DISCH_THEN (fun th -> REWRITE_TAC[GSYM th]) THEN
\r
57 ASM_SIMP_TAC[Conforming.GGRLKHP; contravening_imp_conforming]);;
\r
61 let JGTDEBU2 = prove(`!V. contravening V ==>
\r
62 plain_hypermap (hypermap_of_fan (V,ESTD V))`,
\r
63 REPEAT STRIP_TAC THEN
\r
64 MATCH_MP_TAC PLAIN_HYPERMAP_OF_FAN THEN
\r
65 ASM_SIMP_TAC[CONTRAVENING_FAN]);;
\r
69 let JGTDEBU3 = prove(`!V. contravening V
\r
70 ==> connected_hypermap (hypermap_of_fan (V, ESTD V))`,
\r
71 REPEAT STRIP_TAC THEN
\r
72 MP_TAC (SPEC `V:real^3->bool` Tame_general.CONTRAVENING_FAN) THEN
\r
73 ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
74 MP_TAC (SPECL [`V:real^3->bool`; `ESTD V`] fan_hypermaps_iso) THEN
\r
75 ASM_REWRITE_TAC[] THEN DISCH_THEN (MP_TAC o MATCH_MP iso_connected) THEN
\r
76 DISCH_THEN (fun th -> REWRITE_TAC[GSYM th]) THEN
\r
77 ASM_SIMP_TAC[Conforming.WGVWSKE; contravening_imp_conforming]);;
\r
81 let JGTDEBU4 = prove(`!V. contravening V ==>
\r
82 simple_hypermap (hypermap_of_fan (V, ESTD V))`,
\r
83 REPEAT STRIP_TAC THEN
\r
84 MP_TAC (SPEC `V:real^3->bool` Tame_general.CONTRAVENING_FAN) THEN
\r
85 ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
86 MP_TAC (SPECL [`V:real^3->bool`; `ESTD V`] fan_hypermaps_iso) THEN
\r
87 ASM_REWRITE_TAC[] THEN DISCH_THEN (MP_TAC o MATCH_MP iso_simple) THEN
\r
88 DISCH_THEN (fun th -> REWRITE_TAC[GSYM th]) THEN
\r
89 ASM_SIMP_TAC[Conforming.SRPRNPL; contravening_imp_conforming]);;
\r
93 let JGTDEBU5 = prove(`!V. contravening V ==>
\r
94 is_edge_nondegenerate (hypermap_of_fan (V,ESTD V))`,
\r
95 REPEAT STRIP_TAC THEN
\r
96 MATCH_MP_TAC HYPERMAP_OF_FAN_EDGE_NONDEGENERATE THEN
\r
97 ASM_SIMP_TAC[CONTRAVENING_FAN; CONTRAVENING_IMP_FULLY_SURROUNDED]);;
\r
101 let JGTDEBU6 = prove(`!V. contravening V ==>
\r
102 no_loops (hypermap_of_fan (V,ESTD V))`,
\r
103 REPEAT STRIP_TAC THEN
\r
104 MATCH_MP_TAC HYPERMAP_OF_FAN_NO_LOOPS THEN
\r
105 ASM_SIMP_TAC[CONTRAVENING_FAN]);;
\r
109 let JGTDEBU7 = prove(`!V. contravening V ==>
\r
110 is_no_double_joints (hypermap_of_fan (V,ESTD V))`,
\r
111 REPEAT STRIP_TAC THEN
\r
112 MATCH_MP_TAC HYPERMAP_OF_FAN_NO_DOUBLE_JOINTS THEN
\r
113 ASM_SIMP_TAC[CONTRAVENING_FAN]);;
\r
116 (* number_of_faces (hypermap_of_fan (V, ESTD V)) >= 3 *)
\r
117 let CONTRAVENING_HAS_SIZE_lemma = prove(`!V. contravening V ==> ?n. n > 0 /\ V HAS_SIZE n`,
\r
118 GEN_TAC THEN DISCH_THEN (LABEL_TAC "A") THEN
\r
119 MP_TAC (SPEC_ALL CONTRAVENING_FAN) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
120 REMOVE_THEN "A" MP_TAC THEN
\r
121 REWRITE_TAC[contravening] THEN
\r
122 REPLICATE_TAC 4 (DISCH_THEN (CONJUNCTS_THEN2 (fun th -> ALL_TAC) MP_TAC)) THEN
\r
123 DISCH_THEN (CONJUNCTS_THEN2 ASSUME_TAC (fun th -> ALL_TAC)) THEN
\r
124 EXISTS_TAC `CARD (V:real^3->bool)` THEN
\r
125 ASM_SIMP_TAC[ARITH_RULE `a = 13 \/ a = 14 \/ a = 15 ==> a > 0`] THEN
\r
126 REWRITE_TAC[HAS_SIZE] THEN
\r
127 REMOVE_ASSUM THEN POP_ASSUM MP_TAC THEN
\r
128 REWRITE_TAC[Fan_defs.FAN; Fan_defs.fan1] THEN
\r
133 let JGTDEBU8 = prove(`!V. contravening V ==>
\r
134 number_of_faces (hypermap_of_fan (V,ESTD V)) >= 3`,
\r
135 GEN_TAC THEN DISCH_THEN (LABEL_TAC "A") THEN
\r
136 MP_TAC (SPEC `V:real^3->bool` JGTDEBU4) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
137 MP_TAC (SPEC_ALL CONTRAVENING_FAN) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
138 USE_THEN "A" MP_TAC THEN
\r
139 REWRITE_TAC[contravening] THEN
\r
140 REPLICATE_TAC 5 (DISCH_THEN (CONJUNCTS_THEN2 (fun th -> ALL_TAC) MP_TAC)) THEN
\r
141 DISCH_THEN (CONJUNCTS_THEN2 ASSUME_TAC (fun th -> ALL_TAC)) THEN
\r
142 REWRITE_TAC[Hypermap.number_of_faces] THEN
\r
143 SUBGOAL_THEN `?v:real^3. v IN V` MP_TAC THENL
\r
145 MP_TAC (SPEC `V:real^3->bool` CONTRAVENING_HAS_SIZE_lemma) THEN
\r
146 ASM_REWRITE_TAC[ARITH_RULE `n > 0 <=> ~(n = 0)`] THEN
\r
148 MP_TAC (SPEC `n:num` num_CASES) THEN
\r
149 ASM_REWRITE_TAC[] THEN
\r
151 FIRST_X_ASSUM (MP_TAC o check (is_binary "HAS_SIZE" o concl)) THEN
\r
152 ASM_REWRITE_TAC[HAS_SIZE_CLAUSES] THEN
\r
154 EXISTS_TAC `a:real^3` THEN
\r
155 POP_ASSUM MP_TAC THEN
\r
156 SIMP_TAC[INSERT; EXTENSION; IN_ELIM_THM];
\r
160 MP_TAC (SPECL [`V:real^3->bool`; `ESTD (V:real^3->bool)`; `v:real^3`] DART_EXISTS) THEN
\r
161 ASM_REWRITE_TAC[] THEN
\r
163 ABBREV_TAC `H = hypermap_of_fan (V,ESTD V)` THEN
\r
164 SUBGOAL_THEN `v,w IN dart1_of_fan (V:real^3->bool,ESTD V)` ASSUME_TAC THENL
\r
166 MATCH_MP_TAC SURROUNDED_IMP_IN_DART1_OF_FAN THEN
\r
170 ABBREV_TAC `A = {face H y | y | y IN dart H /\ T /\ y IN node H (v:real^3,w:real^3)}` THEN
\r
171 SUBGOAL_THEN `A SUBSET face_set (H:(real^3#real^3)hypermap)` ASSUME_TAC THENL
\r
173 EXPAND_TAC "A" THEN
\r
174 REWRITE_TAC[SUBSET; IN_ELIM_THM] THEN
\r
175 GEN_TAC THEN STRIP_TAC THEN
\r
176 ASM_REWRITE_TAC[GSYM Hypermap.lemma_in_face_set] THEN
\r
177 EXPAND_TAC "H" THEN
\r
178 ASM_SIMP_TAC[Hypermap.dart; HYPERMAP_OF_FAN];
\r
181 ONCE_REWRITE_TAC[GE] THEN
\r
182 MATCH_MP_TAC LE_TRANS THEN
\r
183 EXISTS_TAC `CARD (A:(real^3#real^3->bool)->bool)` THEN
\r
186 EXPAND_TAC "A" THEN
\r
187 MP_TAC (ISPECL [`H:(real^3#real^3)hypermap`; `v:real^3,w:real^3`; `(\x:real^3#real^3. T)`] SIMPLE_HYPERMAP_lemma) THEN
\r
188 REMOVE_ASSUM THEN REMOVE_ASSUM THEN
\r
189 ASM_REWRITE_TAC[ETA_AX] THEN
\r
190 EXPAND_TAC "H" THEN
\r
191 ASM_SIMP_TAC[Hypermap.dart; HYPERMAP_OF_FAN] THEN
\r
192 SIMP_TAC[SIMPLE_HYPERMAP_lemma] THEN
\r
193 DISCH_THEN (fun th -> ALL_TAC) THEN
\r
194 SUBGOAL_THEN `{y:real^3#real^3 | y IN node H (v,w)} = node H (v,w)` MP_TAC THENL
\r
196 REWRITE_TAC[EXTENSION; IN_ELIM_THM];
\r
199 DISCH_THEN (fun th -> REWRITE_TAC[th]) THEN
\r
200 REWRITE_TAC[GSYM GE] THEN
\r
201 EXPAND_TAC "H" THEN
\r
202 MATCH_MP_TAC SURROUNDED_IMP_CARD_NODE_GE_3 THEN
\r
208 MATCH_MP_TAC CARD_SUBSET THEN
\r
209 ASM_REWRITE_TAC[Hypermap.FINITE_HYPERMAP_ORBITS]
\r
214 (* tame_10 (hypermap_of_fan (V, ESTD V)) *)
\r
215 let JGTDEBU10 = prove(`!V. contravening V ==> tame_10 (hypermap_of_fan (V,ESTD V))`,
\r
216 GEN_TAC THEN DISCH_THEN (LABEL_TAC "A") THEN
\r
217 MP_TAC (SPEC_ALL CONTRAVENING_FAN) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
218 REMOVE_THEN "A" MP_TAC THEN
\r
219 REWRITE_TAC[contravening; tame_10; Hypermap.number_of_nodes] THEN
\r
220 REPLICATE_TAC 4 (DISCH_THEN (CONJUNCTS_THEN2 (fun th -> ALL_TAC) MP_TAC)) THEN
\r
221 DISCH_THEN (CONJUNCTS_THEN2 ASSUME_TAC (fun th -> ALL_TAC)) THEN
\r
222 MP_TAC (SPECL [`V:real^3->bool`; `ESTD V`] NODE_SET_AS_IMAGE) THEN
\r
223 ASM_REWRITE_TAC[] THEN STRIP_TAC THEN ASM_REWRITE_TAC[] THEN
\r
224 SUBGOAL_THEN `CARD(IMAGE (f:real^3 -> ((real^3#real^3) -> bool)) V) = CARD V` (fun th -> REWRITE_TAC[th]) THENL
\r
226 MATCH_MP_TAC CARD_IMAGE_INJ THEN
\r
227 FIRST_X_ASSUM (MP_TAC o check (fun th -> rand (concl th) = `(vec 0:real^3,V:real^3->bool,ESTD V)`)) THEN
\r
228 REWRITE_TAC[Fan_defs.FAN; Fan_defs.fan1] THEN
\r
229 ASM_SIMP_TAC[] THEN
\r
230 DISCH_THEN (fun th -> ALL_TAC) THEN
\r
231 REPEAT STRIP_TAC THEN
\r
232 FIRST_X_ASSUM (MP_TAC o SPECL [`x:real^3`; `y:real^3`]) THEN
\r
236 ASM_REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY]);;
\r
240 (* tame_11a (hypermap_of_fan (V, ESTD V)) *)
\r
241 let JGTDEBU11 = prove(`!V. contravening V ==> tame_11a (hypermap_of_fan (V,ESTD V))`,
\r
242 REPEAT STRIP_TAC THEN
\r
243 MP_TAC (SPEC_ALL CONTRAVENING_FAN) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
\r
244 REWRITE_TAC[tame_11a] THEN
\r
245 ASM_SIMP_TAC[Hypermap.dart; HYPERMAP_OF_FAN] THEN
\r
246 REPEAT STRIP_TAC THEN
\r
247 MP_TAC (SPECL [`V:real^3->bool`; `ESTD (V:real^3->bool)`; `x:real^3#real^3`] IN_DART_OF_FAN) THEN
\r
248 ASM_REWRITE_TAC[] THEN STRIP_TAC THEN
\r
249 MP_TAC (SPECL [`V:real^3->bool`; `ESTD (V:real^3->bool)`; `v:real^3`; `w:real^3`] SURROUNDED_IMP_IN_DART1_OF_FAN) THEN
\r
250 MP_TAC (SPEC_ALL CONTRAVENING_IMP_SURROUNDED) THEN
\r
251 ASM_SIMP_TAC[] THEN REPEAT DISCH_TAC THEN
\r
252 MATCH_MP_TAC SURROUNDED_IMP_CARD_NODE_GE_3 THEN
\r
253 ASM_REWRITE_TAC[]);;
\r