1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Tactic: AFF_SGN_TAC *)
6 (* Author: John Harrison, with minor edits by T. Hales *)
8 (* ========================================================================== *)
10 module type Aff_sgn_tac_type = sig
11 val AFF_SGN_TAC : tactic
16 This is Harrison's 2009 workshop AFF_GE_TAC tactic, slightly adapted
17 to handle signs other than GE.
19 The tactic is documented at
20 http://weyl.math.pitt.edu/hanoi2009/uploads/HOLLight/affsign_small.ml
21 Examples appear at the indicated URL.
23 It proves conv0, aff_gt, aff_ge, and aff_lt formulas in special cases.
27 module Aff_sgn_tac : Aff_sgn_tac_type = struct
31 REWRITE_TAC[DISJOINT_INSERT; DISJOINT_EMPTY] THEN
32 REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY; DE_MORGAN_THM] THEN
34 REWRITE_TAC[aff_ge_def; sgn_ge; aff_gt_def;sgn_gt;conv0;aff_lt_def;sgn_lt;AFFSIGN_ALT] THEN
35 REWRITE_TAC[SET_RULE `(x INSERT s) UNION t = x INSERT (s UNION t)`] THEN
36 REWRITE_TAC[UNION_EMPTY] THEN
37 SIMP_TAC[FINITE_INSERT; FINITE_UNION; AFFINE_HULL_FINITE_STEP_GEN;
38 FINITE_EMPTY; RIGHT_EXISTS_AND_THM;
39 REAL_LE_ADD; REAL_LT_ADD;
40 REAL_ARITH `a < &0 /\ b < &0 ==> a+ b< &0`;
41 REAL_ARITH `&0 < a/ &2 <=> &0 < a`; REAL_ARITH `&0 <= a / &2 <=> &0 <= a`;
42 REAL_ARITH `a/ &2 < &0 <=> a < &0`] THEN
43 ASM_REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY; real_ge;real_gt] THEN
44 REWRITE_TAC[REAL_ARITH `x - y:real = z <=> x = y + z`;
45 VECTOR_ARITH `x - y:real^N = z <=> x = y + z`] THEN
46 REWRITE_TAC[RIGHT_AND_EXISTS_THM; REAL_ADD_RID; VECTOR_ADD_RID] THEN
47 ONCE_REWRITE_TAC[REAL_ARITH `&1 = x <=> x = &1`] THEN
48 REWRITE_TAC[] THEN SET_TAC[];;