1 needs "list_hypermap_iso.hl";;
6 let inv_iso = new_definition `inv_iso (V,E) f = res_inverse f (dart_of_fan (V,E))`;;
9 let INV_ISO = prove(`!V E L f. FAN (vec 0,V,E) /\ good_list L /\
10 isomorphism f (hypermap_of_fan (V,E), hypermap_of_list L)
11 ==> isomorphism (inv_iso (V,E) f) (hypermap_of_list L, hypermap_of_fan (V,E)) /\
12 (!d. d IN dart_of_fan (V,E) ==> inv_iso (V,E) f (f d) = d) /\
13 (!d. d IN darts_of_list L ==> f (inv_iso (V,E) f d) = d) /\
14 (!d:A#A. d IN darts_of_list L ==> inv_iso (V,E) f d IN dart_of_fan (V,E))`,
15 REPEAT GEN_TAC THEN STRIP_TAC THEN
16 SUBGOAL_THEN `isomorphism (inv_iso (V,E) f) (hypermap_of_list (L:((A)list)list), hypermap_of_fan (V,E))` ASSUME_TAC THENL
18 REWRITE_TAC[inv_iso] THEN
19 ASM_SIMP_TAC[GSYM COMPONENTS_HYPERMAP_OF_FAN] THEN
20 MATCH_MP_TAC ISOMORPHISM_INVERSE THEN
24 ASM_REWRITE_TAC[inv_iso] THEN
25 MATCH_MP_TAC BIJ_IMP_RES_INVERSE THEN
28 ASM_SIMP_TAC[isomorphism; COMPONENTS_HYPERMAP_OF_FAN; COMPONENTS_HYPERMAP_OF_LIST]);;
34 let azim_list = new_definition `azim_list (V,E,g) = azim_dart (V,E) o g`;;
37 let SUM_ISOMORPHISM = prove(`!G H (g:B->A) (r:A->real). isomorphism g (G,H)
38 ==> (!d. d IN dart G ==> sum(node G d) (r o g) = sum(node H (g d)) r)`,
40 SUBGOAL_THEN `sum(node G d) (r o (g:B->A)) = sum(IMAGE g (node G d)) r` (fun th -> REWRITE_TAC[th]) THENL
42 MATCH_MP_TAC (GSYM SUM_IMAGE) THEN
44 UNDISCH_TAC `isomorphism (g:B->A) (G,H)` THEN
45 REWRITE_TAC[isomorphism; BIJ; INJ] THEN
46 DISCH_THEN (MP_TAC o CONJUNCT1) THEN
47 DISCH_THEN (MP_TAC o CONJUNCT1) THEN
48 DISCH_THEN (MATCH_MP_TAC o CONJUNCT2) THEN
49 ASM_REWRITE_TAC[] THEN
50 CONJ_TAC THEN MATCH_MP_TAC IN_TRANS THEN EXISTS_TAC `node G (d:B)` THEN ASM_SIMP_TAC[Hypermap.lemma_node_subset];
53 MP_TAC (ISPECL [`g:B->A`; `G:(B)hypermap`; `H:(A)hypermap`; `d:B`] ISOMORPHISM_COMPONENT_IMAGE) THEN
54 ASM_REWRITE_TAC[] THEN
55 DISCH_THEN (fun th -> REWRITE_TAC[GSYM th]));;
61 search [`sum`; `azim_dart`];;
64 let yn = `yn_list (V,E,f) = norm o FST o inv_iso (V,E) f`;;
66 let y1_list = new_definition `y1_list (V,E,f) = norm o FST o inv_iso (V,E) f`;;
67 let y2 = new_definition `y2_list (V,E,f) = norm o SND o inv_iso (V,E) f`;;
68 let y3 = new_definition `y3_list (V,E,f) = norm o SND o n_fan_pair_ext (V,E) o inv_iso (V,E) f`;;
69 let y4 = new_definition `y4_list (V,E,f) = `;;
75 let DART_EXISTS_EQ = prove(`!V E v. FAN (vec 0,V,E) ==>
76 (v IN V <=> (?w. v,w IN dart_of_fan (V,E)))`,
77 REPEAT STRIP_TAC THEN EQ_TAC THENL
79 REWRITE_TAC[DART_EXISTS];
83 MP_TAC (SPECL [`V:real^3->bool`; `E:(real^3->bool)->bool`; `v:real^3,w:real^3`] IN_DART_OF_FAN) THEN
84 ASM_REWRITE_TAC[PAIR_EQ] THEN
92 prove(`!V f (L:((A)list)list). contravening V /\ good_list L /\
93 isomorphism f (hypermap_of_fan (V,ESTD V), hypermap_of_list L)
94 ==> (!d. d IN darts_of_list L ==>
95 #2.0 <= y1_list (V,ESTD V,f) d /\ y1_list (V,ESTD V,f) d <= #2.52)`,
96 REWRITE_TAC[y1_list; o_THM] THEN
97 REPEAT GEN_TAC THEN STRIP_TAC THEN GEN_TAC THEN DISCH_TAC THEN
98 MP_TAC (SPEC_ALL Tame_general.CONTRAVENING_FAN) THEN
99 ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
100 SUBGOAL_THEN `FST (inv_iso (V,ESTD V) f (d:A#A)) IN V` ASSUME_TAC THENL
102 MP_TAC (SPECL [`V:real^3->bool`; `ESTD V`; `FST (inv_iso (V,ESTD V) f (d:A#A))`] DART_EXISTS_EQ) THEN
103 ASM_REWRITE_TAC[] THEN
104 DISCH_THEN (fun th -> REWRITE_TAC[th]) THEN
105 EXISTS_TAC `SND (inv_iso (V,ESTD V) f (d:A#A))` THEN
106 REWRITE_TAC[PAIR] THEN
107 MP_TAC (SPECL [`V:real^3->bool`; `ESTD V`; `L:((A)list)list`; `f:real^3#real^3->A#A`] INV_ISO) THEN
108 ASM_SIMP_TAC[INV_ISO];
111 REWRITE_TAC[GSYM DIST_0] THEN
112 ABBREV_TAC `v = FST (inv_iso (V,ESTD V) f (d:A#A))` THEN
113 MP_TAC (SPEC_ALL Tame_general.CONTRAVENING_DIST) THEN