src/HOL/Modelcheck/MCSyn.ML
author wenzelm
Fri, 21 Nov 1997 15:29:56 +0100
changeset 4271 3a82492e70c5
parent 4089 96fba19bcbe2
child 5069 3ea049f7979d
permissions -rw-r--r--
changed Pure/Sequence interface -- isatool fixseq;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     1
(*  Title:      HOL/Modelcheck/MCSyn.ML
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     2
    ID:         $Id$
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     3
    Author:     Olaf Mueller, Jan Philipps, Robert Sandner
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     4
    Copyright   1997  TU Muenchen
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     5
*)
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     6
3581
0727ebd62b48 removed split_paired_Ex;
wenzelm
parents: 3457
diff changeset
     7
fun mc_tac i state =
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     8
let val sign = #sign (rep_thm state)
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
     9
in 
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    10
case drop(i-1,prems_of state) of
4271
3a82492e70c5 changed Pure/Sequence interface -- isatool fixseq;
wenzelm
parents: 4089
diff changeset
    11
   [] => Seq.empty |
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    12
   subgoal::_ => 
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    13
	let val concl = Logic.strip_imp_concl subgoal;
3818
5a1116b69196 fixed oracle;
wenzelm
parents: 3581
diff changeset
    14
	    val OraAss = invoke_oracle MCSyn.thy "mc" (sign,MCOracleExn concl);
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    15
	in
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    16
	((cut_facts_tac [OraAss] i) THEN (atac i)) state
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    17
        end
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    18
end;
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    19
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    20
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    21
goalw thy [split_def] "(f::'a*'b=>'c) = (%(x, y). f (x, y))";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3210
diff changeset
    22
  by (rtac ext 1);
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    23
  by (stac (surjective_pairing RS sym) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3210
diff changeset
    24
  by (rtac refl 1);
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    25
qed "pair_eta_expand";
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    26
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    27
local
3581
0727ebd62b48 removed split_paired_Ex;
wenzelm
parents: 3457
diff changeset
    28
  val lhss = [read_cterm (sign_of thy) ("f::'a*'b=>'c", TVar (("'a", 0), []))];
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    29
  val rew = mk_meta_eq pair_eta_expand;
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    30
3581
0727ebd62b48 removed split_paired_Ex;
wenzelm
parents: 3457
diff changeset
    31
  fun proc _ _ (Abs _) = Some rew
0727ebd62b48 removed split_paired_Ex;
wenzelm
parents: 3457
diff changeset
    32
    | proc _ _ _ = None;
3210
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    33
in
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    34
  val pair_eta_expand_proc = Simplifier.mk_simproc "pair_eta_expand" lhss proc;
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    35
end;
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    36
e80db1660614 Invoking Model Checkers in Isabelle/HOL;
mueller
parents:
diff changeset
    37
3581
0727ebd62b48 removed split_paired_Ex;
wenzelm
parents: 3457
diff changeset
    38
val MC_ss =
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3818
diff changeset
    39
  simpset() addsimprocs [pair_eta_expand_proc]
3581
0727ebd62b48 removed split_paired_Ex;
wenzelm
parents: 3457
diff changeset
    40
    addsimps [split_paired_Ex, Let_def];