1 let le_lem = prove_by_refinement(
2 `(!y. y <= Y ==> P y) ==>
4 (!y. (y = Y) ==> P y)`,
8 FIRST_ASSUM MATCH_MP_TAC;
9 POP_ASSUM MP_TAC THEN REAL_ARITH_TAC;
10 FIRST_ASSUM MATCH_MP_TAC;
11 POP_ASSUM MP_TAC THEN REAL_ARITH_TAC;
16 let lt_int_lem = prove_by_refinement(
17 `(!y. y < Y ==> P y) ==> X < Y ==>
18 (!y. X < y /\ y < Y ==> P y)`,
22 FIRST_ASSUM MATCH_MP_TAC;
23 FIRST_ASSUM MATCH_ACCEPT_TAC;
27 let ge_lem = prove_by_refinement(
28 `(!y. Y <= y ==> P y) ==>
29 (!y. Y < y ==> P y) /\
30 (!y. (y = Y) ==> P y)`,
34 FIRST_ASSUM MATCH_MP_TAC;
35 POP_ASSUM MP_TAC THEN REAL_ARITH_TAC;
36 FIRST_ASSUM MATCH_MP_TAC;
37 POP_ASSUM MP_TAC THEN REAL_ARITH_TAC;
41 let gt_int_lem = prove_by_refinement(
42 `(!y. Y < y ==> P y) ==> Y < X ==>
43 (!y. Y < y /\ y < X ==> P y)`,
47 FIRST_ASSUM MATCH_MP_TAC;
48 FIRST_ASSUM MATCH_ACCEPT_TAC;
52 let rest_lt_lem = prove_by_refinement(
53 `Y < X ==> (!x. x < X ==> P x) ==> (!x. x < Y ==> P x)`,
57 FIRST_ASSUM MATCH_MP_TAC;
58 ASM_MESON_TAC[REAL_LT_TRANS;real_gt];
62 let rest_gt_lem = prove_by_refinement(
63 `X < Y ==> (!x. X < x ==> P x) ==> (!x. Y < x ==> P x)`,
67 FIRST_ASSUM MATCH_MP_TAC;
68 ASM_MESON_TAC[REAL_LT_TRANS;real_gt];
72 let rest_eq_lt_lem = prove_by_refinement(
73 `Y < X ==> (!x. x < X ==> P x) ==> (!x. (x = Y) ==> P x)`,
77 FIRST_ASSUM MATCH_MP_TAC;
78 ASM_MESON_TAC[REAL_LT_TRANS];
82 let rest_eq_gt_lem = prove_by_refinement(
83 `X < Y ==> (!x. X < x ==> P x) ==> (!x. (x = Y) ==> P x)`,
87 FIRST_ASSUM MATCH_MP_TAC;
88 ASM_MESON_TAC[REAL_LT_TRANS];
92 let rest_int_lt_lem = prove_by_refinement(
93 `Y < X ==> (!x. x < X ==> P x) ==> (!x. Y < x /\ x < X ==> P x)`,
97 FIRST_ASSUM MATCH_MP_TAC;
98 ASM_MESON_TAC[REAL_LT_TRANS];
102 let rest_int_gt_lem = prove_by_refinement(
103 `X < Y ==> (!x. X < x ==> P x) ==> (!x. X < x /\ x < Y ==> P x)`,
107 FIRST_ASSUM MATCH_MP_TAC;
108 ASM_MESON_TAC[REAL_LT_TRANS];
113 let INTERPSIGN_SUBSET = prove_by_refinement(
114 `!P Q p s. interpsign P p s /\ Q SUBSET P ==> interpsign Q p s`,
117 REWRITE_TAC[SUBSET;IN];
118 REPEAT_N 4 STRIP_TAC;
119 STRUCT_CASES_TAC (ISPEC `s:sign` SIGN_CASES) THEN
120 REWRITE_TAC[interpsign] THEN MESON_TAC[];
124 let INTERPSIGNS_SUBSET = prove_by_refinement(
125 `!P Q ps ss. interpsigns ps P ss /\ Q SUBSET P ==> interpsigns ps Q ss`,
128 REWRITE_TAC[SUBSET;IN];
129 REPEAT_N 2 STRIP_TAC;
132 REWRITE_TAC[ALL2;interpsigns;interpsign];
133 REWRITE_TAC[ALL2;interpsigns;interpsign];
135 REWRITE_TAC[ALL2;interpsigns;interpsign];
136 REWRITE_TAC[ALL2;interpsigns;interpsign];
139 MATCH_MP_TAC INTERPSIGN_SUBSET;
140 ASM_MESON_TAC[SUBSET;IN];
141 REWRITE_ASSUMS[ALL2;interpsigns;interpsign];
142 FIRST_ASSUM MATCH_MP_TAC;
147 let NOPOINT_LEM = prove_by_refinement(
148 `!pl sl. interpsigns pl (\x. T) sl ==>
149 (interpsigns pl (\x. x < &0) sl /\
150 interpsigns pl (\x. x = &0) sl /\
151 interpsigns pl (\x. &0 < x) sl)`,
155 REPEAT STRIP_TAC THEN MATCH_MP_TAC INTERPSIGNS_SUBSET THEN ASM_MESON_TAC[SUBSET;IN]