(`!V. contravening V ==>
GEN_TAC THEN DISCH_THEN (LABEL_TAC "A") THEN
MP_TAC (SPEC `V:real^3->bool`
JGTDEBU4) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
MP_TAC (SPEC_ALL
CONTRAVENING_FAN) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
USE_THEN "A" MP_TAC THEN
REWRITE_TAC[contravening] THEN
REPLICATE_TAC 5 (DISCH_THEN (CONJUNCTS_THEN2 (fun
th -> ALL_TAC) MP_TAC)) THEN
DISCH_THEN (CONJUNCTS_THEN2 ASSUME_TAC (fun
th -> ALL_TAC)) THEN
REWRITE_TAC[Hypermap.number_of_faces] THEN
SUBGOAL_THEN `?v:real^3. v
IN V` MP_TAC THENL
[
MP_TAC (SPEC `V:real^3->bool`
CONTRAVENING_HAS_SIZE_lemma) THEN
ASM_REWRITE_TAC[ARITH_RULE `n > 0 <=> ~(n = 0)`] THEN
STRIP_TAC THEN
MP_TAC (SPEC `n:num`
num_CASES) THEN
ASM_REWRITE_TAC[] THEN
STRIP_TAC THEN
FIRST_X_ASSUM (MP_TAC o check (is_binary "HAS_SIZE" o concl)) THEN
ASM_REWRITE_TAC[
HAS_SIZE_CLAUSES] THEN
STRIP_TAC THEN
EXISTS_TAC `a:real^3` THEN
POP_ASSUM MP_TAC THEN
SIMP_TAC[
INSERT;
EXTENSION;
IN_ELIM_THM];
ALL_TAC
] THEN
STRIP_TAC THEN
MP_TAC (SPECL [`V:real^3->bool`; `
ESTD (V:real^3->bool)`; `v:real^3`]
DART_EXISTS) THEN
ASM_REWRITE_TAC[] THEN
STRIP_TAC THEN
ABBREV_TAC `H =
hypermap_of_fan (V,
ESTD V)` THEN
SUBGOAL_THEN `v,w
IN dart1_of_fan (V:real^3->bool,
ESTD V)` ASSUME_TAC THENL
[
MATCH_MP_TAC
SURROUNDED_IMP_IN_DART1_OF_FAN THEN
ASM_SIMP_TAC[];
ALL_TAC
] THEN
ABBREV_TAC `A = {face H y | y | y
IN dart H /\ T /\ y
IN node H (v:real^3,w:real^3)}` THEN
SUBGOAL_THEN `A
SUBSET face_set (H:(real^3#real^3)hypermap)` ASSUME_TAC THENL
[
EXPAND_TAC "A" THEN
REWRITE_TAC[
SUBSET;
IN_ELIM_THM] THEN
GEN_TAC THEN STRIP_TAC THEN
ASM_REWRITE_TAC[GSYM Hypermap.lemma_in_face_set] THEN
EXPAND_TAC "H" THEN
ASM_SIMP_TAC[Hypermap.dart;
HYPERMAP_OF_FAN];
ALL_TAC
] THEN
ONCE_REWRITE_TAC[
GE] THEN
MATCH_MP_TAC
LE_TRANS THEN
EXISTS_TAC `
CARD (A:(real^3#real^3->bool)->bool)` THEN
CONJ_TAC THENL
[
EXPAND_TAC "A" THEN
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
REMOVE_ASSUM THEN REMOVE_ASSUM THEN
ASM_REWRITE_TAC[ETA_AX] THEN
EXPAND_TAC "H" THEN
ASM_SIMP_TAC[Hypermap.dart;
HYPERMAP_OF_FAN] THEN
SIMP_TAC[
SIMPLE_HYPERMAP_lemma] THEN
DISCH_THEN (fun
th -> ALL_TAC) THEN
SUBGOAL_THEN `{y:real^3#real^3 | y
IN node H (v,w)} = node H (v,w)` MP_TAC THENL
[
REWRITE_TAC[
EXTENSION;
IN_ELIM_THM];
ALL_TAC
] THEN
DISCH_THEN (fun
th -> REWRITE_TAC[
th]) THEN
REWRITE_TAC[GSYM
GE] THEN
EXPAND_TAC "H" THEN
MATCH_MP_TAC
SURROUNDED_IMP_CARD_NODE_GE_3 THEN
ASM_SIMP_TAC[];
ALL_TAC
] THEN
MATCH_MP_TAC
CARD_SUBSET THEN
ASM_REWRITE_TAC[Hypermap.FINITE_HYPERMAP_ORBITS]
);;