src/HOL/Modelcheck/EindhovenSyn.thy
author wenzelm
Thu, 06 Mar 2008 21:07:31 +0100
changeset 26225 3bfc71022dea
parent 24634 38db11874724
child 26342 0f65fa163304
permissions -rw-r--r--
replaced execute by system_out;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
     1
(*  Title:      HOL/Modelcheck/EindhovenSyn.thy
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
     2
    ID:         $Id$
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
     3
    Author:     Olaf Mueller, Jan Philipps, Robert Sandner
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
     4
    Copyright   1997  TU Muenchen
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
     5
*)
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
     6
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
     7
theory EindhovenSyn
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
     8
imports MuCalculus
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
     9
begin
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    10
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    11
syntax (Eindhoven output)
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    12
  True          :: bool                                 ("TRUE")
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    13
  False         :: bool                                 ("FALSE")
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    14
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    15
  Not           :: "bool => bool"                       ("NOT _" [40] 40)
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    16
  "op &"        :: "[bool, bool] => bool"               (infixr "AND" 35)
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    17
  "op |"        :: "[bool, bool] => bool"               (infixr "OR" 30)
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    18
21524
7843e2fd14a9 updated (binder) syntax/notation;
wenzelm
parents: 17272
diff changeset
    19
  All_binder    :: "[idts, bool] => bool"               ("'((3A _./ _)')" [0, 10] 10)
7843e2fd14a9 updated (binder) syntax/notation;
wenzelm
parents: 17272
diff changeset
    20
  Ex_binder     :: "[idts, bool] => bool"               ("'((3E _./ _)')" [0, 10] 10)
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    21
   "_lambda"    :: "[pttrns, 'a] => 'b"                 ("(3L _./ _)" 10)
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    22
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    23
  "_idts"       :: "[idt, idts] => idts"                ("_,/_" [1, 0] 0)
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    24
  "_pattern"    :: "[pttrn, patterns] => pttrn"         ("_,/_" [1, 0] 0)
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    25
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    26
  "Mu "         :: "[idts, 'a pred] => 'a pred"         ("(3[mu _./ _])" 1000)
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    27
  "Nu "         :: "[idts, 'a pred] => 'a pred"         ("(3[nu _./ _])" 1000)
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    28
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    29
ML {*
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    30
  val trace_eindhoven = ref false;
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    31
*}
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    32
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    33
oracle mc_eindhoven_oracle ("term") =
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    34
{*
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    35
let
24634
38db11874724 simplified PrintMode interfaces;
wenzelm
parents: 22819
diff changeset
    36
  val eindhoven_term = PrintMode.setmp ["Eindhoven"] o Sign.string_of_term;
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    37
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    38
  fun call_mc s =
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    39
    let
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    40
      val eindhoven_home = getenv "EINDHOVEN_HOME";
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    41
      val pmu =
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    42
        if eindhoven_home = "" then error "Environment variable EINDHOVEN_HOME not set"
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    43
        else eindhoven_home ^ "/pmu";
26225
3bfc71022dea replaced execute by system_out;
wenzelm
parents: 24634
diff changeset
    44
    in #1 (system_out ("echo \"" ^ s ^ "\" | " ^ pmu ^ " -w")) end;
17272
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    45
in
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    46
  fn thy => fn goal =>
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    47
    let
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    48
      val s = eindhoven_term thy goal;
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    49
      val debug = tracing ("MC debugger: " ^ s);
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    50
      val result = call_mc s;
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    51
    in
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    52
      if ! trace_eindhoven then writeln (cat_lines [s, "----", result]) else ();
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    53
      (case result of
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    54
        "TRUE\n"  => goal |
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    55
        "FALSE\n" => error "MC oracle yields FALSE" |
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    56
      _ => error ("MC syntax error: " ^ result))
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    57
    end
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    58
end
c63e5220ed77 converted to Isar theory format;
wenzelm
parents: 7295
diff changeset
    59
*}
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    60
22819
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    61
ML {*
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    62
fun mc_eindhoven_tac i state = SUBGOAL (fn (goal, _) =>
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    63
  let
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    64
    val thy = Thm.theory_of_thm state;
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    65
    val assertion = mc_eindhoven_oracle thy (Logic.strip_imp_concl goal);
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    66
  in cut_facts_tac [assertion] i THEN atac i end) i state;
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    67
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    68
val pair_eta_expand = Thm.symmetric (mk_meta_eq (thm "split_eta"));
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    69
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    70
val pair_eta_expand_proc =
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    71
  Simplifier.simproc (the_context ()) "pair_eta_expand" ["f::'a*'b=>'c"]
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    72
  (fn _ => fn _ => fn t => case t of Abs _ => SOME pair_eta_expand | _ => NONE);
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    73
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    74
val Eindhoven_ss =
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    75
  simpset() addsimprocs [pair_eta_expand_proc] addsimps [Let_def];
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    76
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    77
(*check if user has pmu installed*)
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    78
fun eindhoven_enabled () = getenv "EINDHOVEN_HOME" <> "";
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    79
fun if_eindhoven_enabled f x = if eindhoven_enabled () then f x else ();
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    80
*}
a7b425bb668c removed legacy ML files;
wenzelm
parents: 21524
diff changeset
    81
6466
2eba94dc5951 added modelchecker mucke besides modelchecker eindhoven;
mueller
parents:
diff changeset
    82
end