| author | wenzelm | 
| Tue, 08 Nov 2005 10:43:08 +0100 | |
| changeset 18117 | 61a430a67d7c | 
| parent 18055 | a93881a4422d | 
| child 18443 | a1d53af4c4c7 | 
| permissions | -rw-r--r-- | 
| 16152 | 1 | |
| 2 | (* $Id$ *) | |
| 3 | ||
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 4 | (* search_mu t searches for Mu terms in term t. In the case of nested Mu's, | 
| 15531 | 5 | it yields innermost one. If no Mu term is present, search_mu yields NONE | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 6 | *) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 7 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 8 | (* extended for treatment of nu (TH) *) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 9 | fun search_mu ((Const("MuCalculus.mu",tp)) $ t2) = 
 | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 10 | (case (search_mu t2) of | 
| 15531 | 11 | SOME t => SOME t | 
| 12 | 	    | NONE => SOME ((Const("MuCalculus.mu",tp)) $ t2))
 | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 13 |   | search_mu ((Const("MuCalculus.nu",tp)) $ t2) =
 | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 14 | (case (search_mu t2) of | 
| 15531 | 15 | SOME t => SOME t | 
| 16 |             | NONE => SOME ((Const("MuCalculus.nu",tp)) $ t2))
 | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 17 | | search_mu (t1 $ t2) = | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 18 | (case (search_mu t1) of | 
| 15531 | 19 | SOME t => SOME t | 
| 20 | | NONE => search_mu t2) | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 21 | | search_mu (Abs(_,_,t)) = search_mu t | 
| 15531 | 22 | | search_mu _ = NONE; | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 23 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 24 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 25 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 26 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 27 | (* seraching a variable in a term. Used in move_mus to extract the | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 28 | term-rep of var b in hthm *) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 29 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 30 | fun search_var s t = | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 31 | case t of | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 32 | t1 $ t2 => (case (search_var s t1) of | 
| 15531 | 33 | SOME tt => SOME tt | | 
| 34 | NONE => search_var s t2) | | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 35 | Abs(_,_,t) => search_var s t | | 
| 15531 | 36 | Var((s1,_),_) => if s = s1 then SOME t else NONE | | 
| 37 | _ => NONE; | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 38 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 39 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 40 | (* function move_mus: | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 41 | Mucke can't deal with nested Mu terms. move_mus i searches for | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 42 | Mu terms in the subgoal i and replaces Mu terms in the conclusion | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 43 | by constants and definitions in the premises recursively. | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 44 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 45 | move_thm is the theorem the performs the replacement. To create NEW | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 46 | names for the Mu terms, the indizes of move_thm are incremented by | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 47 | max_idx of the subgoal. | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 48 | *) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 49 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 50 | local | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 51 | |
| 17272 | 52 | val move_thm = prove_goal (the_context ()) "[| a = b ==> P a; a = b |] ==> P b" | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 53 | (fn prems => [cut_facts_tac prems 1, dtac sym 1, hyp_subst_tac 1, | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 54 | REPEAT (resolve_tac prems 1)]); | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 55 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 56 | val sig_move_thm = #sign (rep_thm move_thm); | 
| 15570 | 57 | val bCterm = cterm_of sig_move_thm (valOf (search_var "b" (concl_of move_thm))); | 
| 58 | val aCterm = cterm_of sig_move_thm (valOf (search_var "a" (hd(prems_of move_thm)))); | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 59 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 60 | in | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 61 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 62 | fun move_mus i state = | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 63 | let val sign = #sign (rep_thm state); | 
| 15570 | 64 | val (subgoal::_) = Library.drop(i-1,prems_of state); | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 65 | val concl = Logic.strip_imp_concl subgoal; (* recursive mu's in prems? *) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 66 | val redex = search_mu concl; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 67 | val idx = let val t = #maxidx (rep_thm state) in | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 68 | if t < 0 then 1 else t+1 end; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 69 | in | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 70 | case redex of | 
| 15531 | 71 | NONE => all_tac state | | 
| 72 | SOME redexterm => | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 73 | let val Credex = cterm_of sign redexterm; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 74 | val aiCterm = | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 75 | cterm_of sig_move_thm (Logic.incr_indexes ([],idx) (term_of aCterm)); | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 76 | val inst_move_thm = cterm_instantiate | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 77 | [(bCterm,Credex),(aCterm,aiCterm)] move_thm; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 78 | in | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 79 | ((rtac inst_move_thm i) THEN (dtac eq_reflection i) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 80 | THEN (move_mus i)) state | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 81 | end | 
| 18055 | 82 | end; | 
| 83 | end; | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 84 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 85 | |
| 7295 | 86 | fun call_mucke_tac i state = | 
| 17272 | 87 | let val thy = Thm.theory_of_thm state; | 
| 18055 | 88 | val OraAss = mc_mucke_oracle thy (Logic.nth_prem (i, Thm.prop_of state)) | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 89 | in | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 90 | (cut_facts_tac [OraAss] i) state | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 91 | end; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 92 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 93 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 94 | (* transforming fun-defs into lambda-defs *) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 95 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 96 | val [eq] = goal CPure.thy "(!! x. f x == g x) ==> f == g"; | 
| 7322 | 97 | by (rtac (extensional eq) 1); | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 98 | qed "ext_rl"; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 99 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 100 | infix cc; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 101 | |
| 15531 | 102 | fun NONE cc xl = xl | 
| 103 | | (SOME x) cc xl = x::xl; | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 104 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 105 | fun getargs ((x $ y) $ (Var ((z,_),_))) = getargs (x $ y) ^ " " ^z | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 106 | | getargs (x $ (Var ((y,_),_))) = y; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 107 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 108 | fun getfun ((x $ y) $ z) = getfun (x $ y) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 109 | | getfun (x $ _) = x; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 110 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 111 | local | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 112 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 113 | fun is_prefix [] s = true | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 114 | | is_prefix (p::ps) [] = false | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 115 | | is_prefix (p::ps) (x::xs) = (p=x) andalso (is_prefix ps xs); | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 116 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 117 | fun delete_bold [] = [] | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 118 | | delete_bold (x::xs) = if (is_prefix ("\^["::"["::"0"::"m"::[]) (x::xs))
 | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 119 | then (let val (_::_::_::s) = xs in delete_bold s end) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 120 |         else (if (is_prefix ("\^["::"["::"1"::"m"::[]) (x::xs))
 | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 121 | then (let val (_::_::_::s) = xs in delete_bold s end) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 122 | else (x::delete_bold xs)); | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 123 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 124 | fun delete_bold_string s = implode(delete_bold (explode s)); | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 125 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 126 | in | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 127 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 128 | (* extension with removing bold font (TH) *) | 
| 15531 | 129 | fun mk_lam_def (_::_) _ _ = NONE | 
| 130 |   | mk_lam_def [] ((Const("==",_) $ (Const _)) $ RHS) t = SOME t
 | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 131 |   | mk_lam_def [] ((Const("==",_) $ LHS) $ RHS) t = 
 | 
| 16429 
e871f4b1a4f0
replaced obsolete theory_of_sign by theory_of_thm;
 wenzelm parents: 
16152diff
changeset | 132 | let val thy = theory_of_thm t; | 
| 
e871f4b1a4f0
replaced obsolete theory_of_sign by theory_of_thm;
 wenzelm parents: 
16152diff
changeset | 133 | val fnam = Sign.string_of_term thy (getfun LHS); | 
| 
e871f4b1a4f0
replaced obsolete theory_of_sign by theory_of_thm;
 wenzelm parents: 
16152diff
changeset | 134 | val rhs = Sign.string_of_term thy (freeze_thaw RHS) | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 135 | val gl = delete_bold_string (fnam ^" == % " ^ (getargs LHS) ^" . " ^ rhs); | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 136 | in | 
| 16429 
e871f4b1a4f0
replaced obsolete theory_of_sign by theory_of_thm;
 wenzelm parents: 
16152diff
changeset | 137 | SOME (prove_goal thy gl (fn prems => | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 138 | [(REPEAT (rtac ext_rl 1)), (rtac t 1) ])) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 139 | end | 
| 15531 | 140 | | mk_lam_def [] _ t= NONE; | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 141 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 142 | fun mk_lam_defs ([]:thm list) = ([]: thm list) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 143 | | mk_lam_defs (t::l) = | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 144 | (mk_lam_def (prems_of t) (concl_of t) t) cc (mk_lam_defs l); | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 145 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 146 | end; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 147 | |
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 148 | (* first simplification, then model checking *) | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 149 | |
| 11025 
a70b796d9af8
converted to Isar therory, adding attributes complete_split and split_format
 oheimb parents: 
10212diff
changeset | 150 | goalw (theory "Product_Type") [split_def] "(f::'a*'b=>'c) = (%(x, y). f (x, y))"; | 
| 7322 | 151 | by (rtac ext 1); | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 152 | by (stac (surjective_pairing RS sym) 1); | 
| 7322 | 153 | by (rtac refl 1); | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 154 | qed "pair_eta_expand"; | 
| 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 155 | |
| 13462 | 156 | val pair_eta_expand_proc = | 
| 13480 
bb72bd43c6c3
use Tactic.prove instead of prove_goalw_cterm in internal proofs!
 wenzelm parents: 
13462diff
changeset | 157 | Simplifier.simproc (Theory.sign_of (the_context ())) | 
| 
bb72bd43c6c3
use Tactic.prove instead of prove_goalw_cterm in internal proofs!
 wenzelm parents: 
13462diff
changeset | 158 | "pair_eta_expand" ["f::'a*'b=>'c"] | 
| 
bb72bd43c6c3
use Tactic.prove instead of prove_goalw_cterm in internal proofs!
 wenzelm parents: 
13462diff
changeset | 159 | (fn _ => fn _ => fn t => | 
| 15531 | 160 | case t of Abs _ => SOME (mk_meta_eq pair_eta_expand) | 
| 161 | | _ => NONE); | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 162 | |
| 7295 | 163 | val Mucke_ss = simpset() addsimprocs [pair_eta_expand_proc] addsimps [Let_def]; | 
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 164 | |
| 7295 | 165 | |
| 166 | (* the interface *) | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 167 | |
| 7295 | 168 | fun mc_mucke_tac defs i state = | 
| 15570 | 169 | (case Library.drop (i - 1, Thm.prems_of state) of | 
| 16152 | 170 | [] => no_tac state | 
| 7295 | 171 | | subgoal :: _ => | 
| 172 | EVERY [ | |
| 173 | REPEAT (etac thin_rl i), | |
| 174 | cut_facts_tac (mk_lam_defs defs) i, | |
| 175 | full_simp_tac (Mucke_ss delsimps [not_iff,split_part]) i, | |
| 176 | move_mus i, call_mucke_tac i,atac i, | |
| 177 | REPEAT (rtac refl i)] state); | |
| 6466 
2eba94dc5951
added modelchecker mucke besides modelchecker eindhoven;
 mueller parents: diff
changeset | 178 | |
| 7295 | 179 | (*check if user has mucke installed*) | 
| 180 | fun mucke_enabled () = getenv "MUCKE_HOME" <> ""; | |
| 181 | fun if_mucke_enabled f x = if mucke_enabled () then f x else (); |