1 module Lp_ineqs_def = struct
6 (* Definitions of all fan variables *)
8 let azim2_fan = new_definition `azim2_fan (V,E) (x:real^3#real^3) = azim_dart (V,E) (f_fan_pair_ext (V,E) x)`;;
9 let azim3_fan = new_definition `azim3_fan (V,E) (x:real^3#real^3) = azim_dart (V,E) (inverse (f_fan_pair_ext (V,E)) x)`;;
11 let yn_fan = new_definition `yn_fan (v:real^3) = norm v`;;
12 let ln_fan = new_definition `ln_fan (v:real^3) = lmfun (yn_fan v / &2)`;;
13 let rho_fan = new_definition `rho_fan (v:real^3) = abs (&1 + const1 * (&1 - ln_fan v))`;;
14 let ye_fan = new_definition `ye_fan (x:real^3#real^3) = dist x`;;
16 let y1_fan = new_definition `y1_fan (x:real^3#real^3) = norm (FST x)`;;
17 let y2_fan = new_definition `y2_fan (x:real^3#real^3) = norm (SND x)`;;
18 let y3_fan = new_definition `y3_fan (V,E) (x:real^3#real^3) = norm (FST (inverse (f_fan_pair_ext (V,E)) x))`;;
19 let y4_fan = new_definition `y4_fan (V,E) (x:real^3#real^3) = dist (f_fan_pair_ext (V,E) x)`;;
20 let y5_fan = new_definition `y5_fan (V,E) (x:real^3#real^3) = dist (inverse (f_fan_pair_ext (V,E)) x)`;;
21 let y6_fan = new_definition `y6_fan (x:real^3#real^3) = dist x`;;
22 let y8_fan = new_definition `y8_fan (V,E) (x:real^3#real^3) = y5_fan (V,E) (inverse (f_fan_pair_ext (V,E)) x)`;;
23 let y9_fan = new_definition `y9_fan (V,E) (x:real^3#real^3) = dist (f_fan_pair_ext (V,E) x)`;;
25 let rhazim_fan = new_definition `rhazim_fan (V,E) (x:real^3#real^3) = abs (&1 + const1 * (&1 - lmfun (h_dart x))) * azim_dart (V,E) x`;;
26 let rhazim2_fan = new_definition `rhazim2_fan (V,E) (x:real^3#real^3) = rhazim_fan (V,E) (f_fan_pair_ext (V,E) x)`;;
27 let rhazim3_fan = new_definition `rhazim3_fan (V,E) (x:real^3#real^3) = rhazim_fan (V,E) (inverse (f_fan_pair_ext (V,E)) x)`;;
29 (* All variables must be positive without any side conditions *)
30 let sol_fan = new_definition `sol_fan (V,E) f = abs (sum f (\x. azim_dart (V,E) x - pi) + &2 * pi)`;;
31 let tau_fan = new_definition `tau_fan (V,E) f = abs (tauVEF (V,E,f))`;;
34 let y4'_fan = new_definition `y4'_fan (V,E) (x:real^3#real^3) = dist (SND x, FST (inverse (f_fan_pair_ext (V,E)) x))`;;
35 let y7_fan = new_definition
36 `y7_fan (V,E) (x:real^3#real^3) = norm (FST ((inverse (f_fan_pair_ext (V,E)) POWER 2) x))`;;
40 azim2_fan; azim3_fan; yn_fan; ln_fan; ye_fan;
41 rho_fan; sol_fan; tau_fan; rhazim_fan; rhazim2_fan; rhazim3_fan;
42 y1_fan; y2_fan; y3_fan; y4_fan; y5_fan; y6_fan; y8_fan; y9_fan; y4'_fan;
46 (* Variables for lists *)
47 (* g - an isomorphism from hypermap_of_list to hypermap_of_fan *)
48 (* fan = (V,E) - a fan *)
49 (* g x = h (FST x), h (SND x) *)
51 let list_defs = map new_definition
53 `azim_list (g,fan) = (azim_dart fan o g):num#num->real`;
54 `azim2_list (g,fan) = (azim2_fan fan o g):num#num->real`;
55 `azim3_list (g,fan) = (azim3_fan fan o g):num#num->real`;
56 `yn_list h = (yn_fan o h):num->real`;
57 `ln_list h = (ln_fan o h):num->real`;
58 `rho_list h = (rho_fan o h):num->real`;
59 `rhazim_list (g,fan) = (rhazim_fan fan o g):num#num->real`;
60 `rhazim2_list (g,fan) = (rhazim2_fan fan o g):num#num->real`;
61 `rhazim3_list (g,fan) = (rhazim3_fan fan o g):num#num->real`;
62 `(ye_list g):(num#num->real) = ye_fan o g`;
63 `(sol_list (g,fan)):(num#num->bool)->real = sol_fan fan o IMAGE g`;
64 `(tau_list (g,fan)):(num#num->bool)->real = tau_fan fan o IMAGE g`;
65 `(y1_list g):(num#num->real) = y1_fan o g`;
66 `(y2_list g):(num#num->real) = y2_fan o g`;
67 `(y3_list (g,fan)):(num#num->real) = y3_fan fan o g`;
68 `(y4_list (g,fan)):(num#num->real) = y4_fan fan o g`;
69 `(y5_list (g,fan)):(num#num->real) = y5_fan fan o g`;
70 `(y6_list g):(num#num->real) = y6_fan o g`;
71 `(y8_list (g,fan)):(num#num->real) = y8_fan fan o g`;
72 `(y9_list (g,fan)):(num#num->real) = y9_fan fan o g`;
73 `(y4'_list (g,fan)):(num#num->real) = y4'_fan fan o g`;
77 let list_defs2 = map (REWRITE_RULE[FUN_EQ_THM; o_THM]) list_defs;;
79 let list_defs_th = end_itlist CONJ list_defs;;
81 let list_var_rewrites =
82 map GSYM list_defs @ map GSYM list_defs2;;
85 (* All variables are nonnegative *)
87 let AZIM_DART_POS = prove(`&0 <= azim_dart (V,E) x`,
88 MP_TAC (ISPEC `x:real^3#real^3` PAIR_SURJECTIVE) THEN
90 ASM_REWRITE_TAC[azim_dart] THEN
93 MP_TAC PI_APPROX_32 THEN REAL_ARITH_TAC;
96 REWRITE_TAC[azim_fan] THEN
97 COND_CASES_TAC THEN REWRITE_TAC[azim] THEN
98 MP_TAC PI_APPROX_32 THEN REAL_ARITH_TAC);;
101 let DIST_POS = prove(`!x:(real^3#real^3). &0 <= dist x`,
102 GEN_TAC THEN MP_TAC (ISPEC `x:real^3#real^3` PAIR_SURJECTIVE) THEN
103 STRIP_TAC THEN ASM_REWRITE_TAC[dist; NORM_POS_LE]);;
106 let list_var_pos = map (fun tm -> prove(tm,
107 GEN_TAC THEN REWRITE_TAC list_defs2 THEN
108 MP_TAC (ISPEC `fan:(real^3->bool)#((real^3->bool)->bool)` PAIR_SURJECTIVE) THEN
109 STRIP_TAC THEN ASM_REWRITE_TAC fan_defs THEN
110 TRY (MATCH_MP_TAC REAL_LE_MUL) THEN
111 REWRITE_TAC[AZIM_DART_POS; REAL_ABS_POS; NORM_POS_LE; DIST_POS; Fnjlbxs.lmfun_ge0]))
113 `!x. &0 <= azim_list (g,fan) x`;
114 `!x. &0 <= azim2_list (g,fan) x`;
115 `!x. &0 <= azim3_list (g,fan) x`;
116 `!x. &0 <= rhazim_list (g,fan) x`;
117 `!x. &0 <= rhazim2_list (g,fan) x`;
118 `!x. &0 <= rhazim3_list (g,fan) x`;
119 `!v. &0 <= yn_list h v`;
120 `!v. &0 <= ln_list h v`;
121 `!v. &0 <= rho_list h v`;
122 `!f. &0 <= sol_list (g,fan) f`;
123 `!f. &0 <= tau_list (g,fan) f`;
124 `!x. &0 <= ye_list g x`;
125 `!x. &0 <= y1_list g x`;
126 `!x. &0 <= y2_list g x`;
127 `!x. &0 <= y3_list (g,fan) x`;
128 `!x. &0 <= y4_list (g,fan) x`;
129 `!x. &0 <= y5_list (g,fan) x`;
130 `!x. &0 <= y6_list g x`;
131 `!x. &0 <= y8_list (g,fan) x`;
132 `!x. &0 <= y9_list (g,fan) x`;
133 `!x. &0 <= y4'_list (g,fan) x`;