1 (* ------------------------------------------------------------------------- *)
2 (* Condense subdivision by removing points with no relevant zeros. *)
3 (* ------------------------------------------------------------------------- *)
5 let real_cases = prove(`!x y. x < y \/ (x = y) \/ y < x`,REAL_ARITH_TAC);;
8 `!x. (x1 < x2 /\ x2 < x3) /\ ((x1 < x /\ x < x2) \/ (x = x2) \/ (x2 < x /\ x < x3)) ==> x1 < x /\ x < x3`,
11 let gen_thm = prove_by_refinement(
14 (!x. x1 < x /\ x < x2 ==> P x) ==>
15 (!x. (x = x2) ==> P x) ==>
16 (!x. x2 < x /\ x < x3 ==> P x) ==>
17 (!x. x1 < x /\ x < x3 ==> P x)`,
21 MESON_TAC[real_cases;gt_aux;DE_MORGAN_THM;REAL_NOT_LT;REAL_LE_LT];
26 let gen_thm_noleft = prove(
29 (!x. x < x2 ==> P x) ==>
30 (!x. (x = x2) ==> P x) ==>
31 (!x. x2 < x /\ x < x3 ==> P x) ==>
32 (!x. x < x3 ==> P x)`,
33 MESON_TAC[real_cases;gt_aux]);;
35 let gen_thm_noright = prove(
38 (!x. x1 < x /\ x < x2 ==> P x) ==>
39 (!x. (x = x2) ==> P x) ==>
40 (!x. x2 < x ==> P x) ==>
41 (!x. x1 < x ==> P x)`,
42 MESON_TAC[real_cases;gt_aux]);;
44 let gen_thm_noboth = prove(
47 (!x. x < x2 ==> P x) ==>
48 (!x. (x = x2) ==> P x) ==>
49 (!x. x2 < x ==> P x) ==>
51 MESON_TAC[real_cases;gt_aux]);;