| author | haftmann | 
| Sat, 17 Jan 2009 22:08:14 +0100 | |
| changeset 29546 | aa8a1ed95a57 | 
| parent 27325 | 70e4eb732fa9 | 
| child 31974 | e81979a703a4 | 
| permissions | -rw-r--r-- | 
| 4349 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 1 | (* Title: FOL/fologic.ML | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 2 | ID: $Id$ | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 3 | Author: Lawrence C Paulson | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 4 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 5 | Abstract syntax operations for FOL. | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 6 | *) | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 7 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 8 | signature FOLOGIC = | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 9 | sig | 
| 6140 | 10 | val oT : typ | 
| 11 | val mk_Trueprop : term -> term | |
| 12 | val dest_Trueprop : term -> term | |
| 9850 | 13 | val not : term | 
| 6140 | 14 | val conj : term | 
| 15 | val disj : term | |
| 16 | val imp : term | |
| 9543 | 17 | val iff : term | 
| 7692 | 18 | val mk_conj : term * term -> term | 
| 19 | val mk_disj : term * term -> term | |
| 20 | val mk_imp : term * term -> term | |
| 6140 | 21 | val dest_imp : term -> term*term | 
| 11668 | 22 | val dest_conj : term -> term list | 
| 9543 | 23 | val mk_iff : term * term -> term | 
| 24 | val dest_iff : term -> term*term | |
| 6140 | 25 | val all_const : typ -> term | 
| 26 | val mk_all : term * term -> term | |
| 27 | val exists_const : typ -> term | |
| 28 | val mk_exists : term * term -> term | |
| 29 | val eq_const : typ -> term | |
| 30 | val mk_eq : term * term -> term | |
| 31 | val dest_eq : term -> term*term | |
| 9543 | 32 | val mk_binop: string -> term * term -> term | 
| 33 | val mk_binrel: string -> term * term -> term | |
| 34 | val dest_bin: string -> typ -> term -> term * term | |
| 4349 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 35 | end; | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 36 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 37 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 38 | structure FOLogic: FOLOGIC = | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 39 | struct | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 40 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 41 | val oT = Type("o",[]);
 | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 42 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 43 | val Trueprop = Const("Trueprop", oT-->propT);
 | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 44 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 45 | fun mk_Trueprop P = Trueprop $ P; | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 46 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 47 | fun dest_Trueprop (Const ("Trueprop", _) $ P) = P
 | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 48 |   | dest_Trueprop t = raise TERM ("dest_Trueprop", [t]);
 | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 49 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 50 | (** Logical constants **) | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 51 | |
| 9850 | 52 | val not = Const ("Not", oT --> oT);
 | 
| 53 | val conj = Const("op &", [oT,oT]--->oT);
 | |
| 54 | val disj = Const("op |", [oT,oT]--->oT);
 | |
| 55 | val imp = Const("op -->", [oT,oT]--->oT)
 | |
| 56 | val iff = Const("op <->", [oT,oT]--->oT);
 | |
| 4349 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 57 | |
| 7692 | 58 | fun mk_conj (t1, t2) = conj $ t1 $ t2 | 
| 59 | and mk_disj (t1, t2) = disj $ t1 $ t2 | |
| 9543 | 60 | and mk_imp (t1, t2) = imp $ t1 $ t2 | 
| 61 | and mk_iff (t1, t2) = iff $ t1 $ t2; | |
| 7692 | 62 | |
| 4466 
305390f23734
Better equality handling in Blast_tac, usingd a new variant of hyp_subst_tac
 paulson parents: 
4349diff
changeset | 63 | fun dest_imp (Const("op -->",_) $ A $ B) = (A, B)
 | 
| 
305390f23734
Better equality handling in Blast_tac, usingd a new variant of hyp_subst_tac
 paulson parents: 
4349diff
changeset | 64 |   | dest_imp  t = raise TERM ("dest_imp", [t]);
 | 
| 
305390f23734
Better equality handling in Blast_tac, usingd a new variant of hyp_subst_tac
 paulson parents: 
4349diff
changeset | 65 | |
| 11668 | 66 | fun dest_conj (Const ("op &", _) $ t $ t') = t :: dest_conj t'
 | 
| 67 | | dest_conj t = [t]; | |
| 68 | ||
| 9543 | 69 | fun dest_iff (Const("op <->",_) $ A $ B) = (A, B)
 | 
| 70 |   | dest_iff  t = raise TERM ("dest_iff", [t]);
 | |
| 71 | ||
| 4349 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 72 | fun eq_const T = Const ("op =", [T, T] ---> oT);
 | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 73 | fun mk_eq (t, u) = eq_const (fastype_of t) $ t $ u; | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 74 | |
| 6140 | 75 | fun dest_eq (Const ("op =", _) $ lhs $ rhs) = (lhs, rhs)
 | 
| 76 |   | dest_eq t = raise TERM ("dest_eq", [t])
 | |
| 77 | ||
| 4349 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 78 | fun all_const T = Const ("All", [T --> oT] ---> oT);
 | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 79 | fun mk_all (Free(x,T),P) = all_const T $ (absfree (x,T,P)); | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 80 | |
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 81 | fun exists_const T = Const ("Ex", [T --> oT] ---> oT);
 | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 82 | fun mk_exists (Free(x,T),P) = exists_const T $ (absfree (x,T,P)); | 
| 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 83 | |
| 9543 | 84 | (* binary oprations and relations *) | 
| 85 | ||
| 86 | fun mk_binop c (t, u) = | |
| 87 | let val T = fastype_of t in | |
| 88 | Const (c, [T, T] ---> T) $ t $ u | |
| 89 | end; | |
| 90 | ||
| 91 | fun mk_binrel c (t, u) = | |
| 92 | let val T = fastype_of t in | |
| 93 | Const (c, [T, T] ---> oT) $ t $ u | |
| 94 | end; | |
| 95 | ||
| 96 | fun dest_bin c T (tm as Const (c', Type ("fun", [T', _])) $ t $ u) =
 | |
| 97 | if c = c' andalso T = T' then (t, u) | |
| 98 |       else raise TERM ("dest_bin " ^ c, [tm])
 | |
| 99 |   | dest_bin c _ tm = raise TERM ("dest_bin " ^ c, [tm]);
 | |
| 100 | ||
| 101 | ||
| 4349 
50403e5a44c0
Instantiated the one-point-rule quantifier simpprocs for FOL
 paulson parents: diff
changeset | 102 | end; |