src/HOL/Modelcheck/MuckeSyn.ML
author wenzelm
Wed, 26 Jul 2006 00:44:44 +0200
changeset 20207 4c57e850e8d5
parent 18443 a1d53af4c4c7
child 20257 ebe183ff903d
permissions -rw-r--r--
added Pure/subgoal.ML;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16152
7294283b0c45 no_tac;
wenzelm
parents: 15570
diff changeset
     1
7294283b0c45 no_tac;
wenzelm
parents: 15570
diff changeset
     2
(* $Id$ *)
7294283b0c45 no_tac;
wenzelm
parents: 15570
diff changeset
     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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
     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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    11
	      SOME t => SOME t 
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    15
              SOME t => SOME t
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    19
	      SOME t => SOME t 
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    33
		             SOME tt => SOME tt |
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    36
     Var((s1,_),_) => if s = s1 then SOME t else NONE |
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    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
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 16429
diff changeset
    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
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
    57
  val bCterm = cterm_of sig_move_thm (valOf (search_var "b" (concl_of move_thm)));
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
    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
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
    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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    71
     NONE => all_tac state |
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
    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
a93881a4422d Logic.nth_prem;
wenzelm
parents: 17272
diff changeset
    82
end;
a93881a4422d Logic.nth_prem;
wenzelm
parents: 17272
diff changeset
    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
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
    86
fun call_mucke_tac i state =
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 16429
diff changeset
    87
let val thy = Thm.theory_of_thm state;
18055
a93881a4422d Logic.nth_prem;
wenzelm
parents: 17272
diff changeset
    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
d16d7ddcc842 isatool expandshort;
wenzelm
parents: 7295
diff changeset
    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
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
   102
fun NONE cc xl = xl
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
   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 delete_bold [] = []
18443
a1d53af4c4c7 removed superfluos is_prefix functions
haftmann
parents: 18055
diff changeset
   114
| delete_bold (x::xs) = if (is_prefix (op =) ("\^["::"["::"0"::"m"::[]) (x::xs))
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   115
        then (let val (_::_::_::s) = xs in delete_bold s end)
18443
a1d53af4c4c7 removed superfluos is_prefix functions
haftmann
parents: 18055
diff changeset
   116
        else (if (is_prefix (op =) ("\^["::"["::"1"::"m"::[]) (x::xs))
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   117
                then  (let val (_::_::_::s) = xs in delete_bold s end)
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   118
                else (x::delete_bold xs));
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   119
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   120
fun delete_bold_string s = implode(delete_bold (explode s));
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   121
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   122
in
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   123
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   124
(* extension with removing bold font (TH) *)
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
   125
fun mk_lam_def (_::_) _ _ = NONE  
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
   126
  | mk_lam_def [] ((Const("==",_) $ (Const _)) $ RHS) t = SOME t
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   127
  | mk_lam_def [] ((Const("==",_) $ LHS) $ RHS) t = 
16429
e871f4b1a4f0 replaced obsolete theory_of_sign by theory_of_thm;
wenzelm
parents: 16152
diff changeset
   128
    let val thy = theory_of_thm t;
e871f4b1a4f0 replaced obsolete theory_of_sign by theory_of_thm;
wenzelm
parents: 16152
diff changeset
   129
	val fnam = Sign.string_of_term thy (getfun LHS);
e871f4b1a4f0 replaced obsolete theory_of_sign by theory_of_thm;
wenzelm
parents: 16152
diff changeset
   130
	val rhs = Sign.string_of_term thy (freeze_thaw RHS)
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   131
	val gl = delete_bold_string (fnam ^" == % " ^ (getargs LHS) ^" . " ^ rhs);
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   132
    in
16429
e871f4b1a4f0 replaced obsolete theory_of_sign by theory_of_thm;
wenzelm
parents: 16152
diff changeset
   133
	SOME (prove_goal thy gl (fn prems =>
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   134
  		[(REPEAT (rtac ext_rl 1)), (rtac t 1) ]))
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   135
    end
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
   136
| mk_lam_def [] _ t= NONE; 
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   137
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   138
fun mk_lam_defs ([]:thm list) = ([]: thm list) 
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   139
  | mk_lam_defs (t::l) = 
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   140
      (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
   141
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   142
end;
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   143
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   144
(* first simplification, then model checking *)
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   145
11025
a70b796d9af8 converted to Isar therory, adding attributes complete_split and split_format
oheimb
parents: 10212
diff changeset
   146
goalw (theory "Product_Type") [split_def] "(f::'a*'b=>'c) = (%(x, y). f (x, y))";
7322
d16d7ddcc842 isatool expandshort;
wenzelm
parents: 7295
diff changeset
   147
  by (rtac ext 1);
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   148
  by (stac (surjective_pairing RS sym) 1);
7322
d16d7ddcc842 isatool expandshort;
wenzelm
parents: 7295
diff changeset
   149
  by (rtac refl 1);
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   150
qed "pair_eta_expand";
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   151
13462
56610e2ba220 sane interface for simprocs;
wenzelm
parents: 11025
diff changeset
   152
val pair_eta_expand_proc =
13480
bb72bd43c6c3 use Tactic.prove instead of prove_goalw_cterm in internal proofs!
wenzelm
parents: 13462
diff changeset
   153
  Simplifier.simproc (Theory.sign_of (the_context ()))
bb72bd43c6c3 use Tactic.prove instead of prove_goalw_cterm in internal proofs!
wenzelm
parents: 13462
diff changeset
   154
    "pair_eta_expand" ["f::'a*'b=>'c"]
bb72bd43c6c3 use Tactic.prove instead of prove_goalw_cterm in internal proofs!
wenzelm
parents: 13462
diff changeset
   155
    (fn _ => fn _ => fn t =>
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
   156
      case t of Abs _ => SOME (mk_meta_eq pair_eta_expand)
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 13480
diff changeset
   157
      | _ => NONE);
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   158
7295
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   159
val Mucke_ss = simpset() addsimprocs [pair_eta_expand_proc] addsimps [Let_def];
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   160
7295
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   161
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   162
(* the interface *)
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   163
7295
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   164
fun mc_mucke_tac defs i state =
15570
8d8c70b41bab Move towards standard functions.
skalberg
parents: 15531
diff changeset
   165
  (case Library.drop (i - 1, Thm.prems_of state) of
16152
7294283b0c45 no_tac;
wenzelm
parents: 15570
diff changeset
   166
    [] => no_tac state
7295
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   167
  | subgoal :: _ =>
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   168
      EVERY [
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   169
        REPEAT (etac thin_rl i),
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   170
        cut_facts_tac (mk_lam_defs defs) i,
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   171
        full_simp_tac (Mucke_ss delsimps [not_iff,split_part]) i,
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   172
        move_mus i, call_mucke_tac i,atac i,
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   173
        REPEAT (rtac refl i)] state);
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
   174
7295
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   175
(*check if user has mucke installed*)
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   176
fun mucke_enabled () = getenv "MUCKE_HOME" <> "";
fe09a0c5cebe quite a lot of tuning an cleanup;
wenzelm
parents: 6466
diff changeset
   177
fun if_mucke_enabled f x = if mucke_enabled () then f x else ();