src/HOL/ex/SVC_Oracle.thy
author haftmann
Wed, 10 Feb 2010 08:49:26 +0100
changeset 35084 e25eedfc15ce
parent 34974 18b41bba42b5
child 35092 cfe605c54e50
permissions -rw-r--r--
moved constants inverse and divide to Ring.thy
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12869
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/ex/SVC_Oracle.thy
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
     3
    Author:     Lawrence C Paulson
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
     4
    Copyright   1999  University of Cambridge
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
     5
17388
495c799df31d tuned headers etc.;
wenzelm
parents: 16836
diff changeset
     6
Based upon the work of Søren T. Heilmann.
495c799df31d tuned headers etc.;
wenzelm
parents: 16836
diff changeset
     7
*)
12869
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
     8
17388
495c799df31d tuned headers etc.;
wenzelm
parents: 16836
diff changeset
     9
header {* Installing an oracle for SVC (Stanford Validity Checker) *}
12869
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
    10
16836
45a3dc4688bc improved oracle setup;
wenzelm
parents: 16417
diff changeset
    11
theory SVC_Oracle
45a3dc4688bc improved oracle setup;
wenzelm
parents: 16417
diff changeset
    12
imports Main
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    13
uses "svc_funcs.ML"
16836
45a3dc4688bc improved oracle setup;
wenzelm
parents: 16417
diff changeset
    14
begin
12869
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
    15
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
    16
consts
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
    17
  iff_keep :: "[bool, bool] => bool"
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
    18
  iff_unfold :: "[bool, bool] => bool"
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
    19
16836
45a3dc4688bc improved oracle setup;
wenzelm
parents: 16417
diff changeset
    20
hide const iff_keep iff_unfold
45a3dc4688bc improved oracle setup;
wenzelm
parents: 16417
diff changeset
    21
28290
4cc2b6046258 simplified oracle interface;
wenzelm
parents: 28263
diff changeset
    22
oracle svc_oracle = Svc.oracle
12869
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
    23
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    24
ML {*
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    25
(*
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    26
Installing the oracle for SVC (Stanford Validity Checker)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    27
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    28
The following code merely CALLS the oracle;
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    29
  the soundness-critical functions are at svc_funcs.ML
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    30
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    31
Based upon the work of Søren T. Heilmann
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    32
*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    33
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    34
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    35
(*Generalize an Isabelle formula, replacing by Vars
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    36
  all subterms not intelligible to SVC.*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    37
fun svc_abstract t =
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    38
  let
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    39
    (*The oracle's result is given to the subgoal using compose_tac because
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    40
      its premises are matched against the assumptions rather than used
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    41
      to make subgoals.  Therefore , abstraction must copy the parameters
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    42
      precisely and make them available to all generated Vars.*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    43
    val params = Term.strip_all_vars t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    44
    and body   = Term.strip_all_body t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    45
    val Us = map #2 params
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    46
    val nPar = length params
32740
9dd0a2f83429 explicit indication of Unsynchronized.ref;
wenzelm
parents: 28290
diff changeset
    47
    val vname = Unsynchronized.ref "V_a"
9dd0a2f83429 explicit indication of Unsynchronized.ref;
wenzelm
parents: 28290
diff changeset
    48
    val pairs = Unsynchronized.ref ([] : (term*term) list)
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    49
    fun insert t =
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    50
        let val T = fastype_of t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    51
            val v = Logic.combound (Var ((!vname,0), Us--->T), 0, nPar)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    52
        in  vname := Symbol.bump_string (!vname);
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    53
            pairs := (t, v) :: !pairs;
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    54
            v
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    55
        end;
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    56
    fun replace t =
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    57
        case t of
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    58
            Free _  => t  (*but not existing Vars, lest the names clash*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    59
          | Bound _ => t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    60
          | _ => (case AList.lookup Pattern.aeconv (!pairs) t of
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    61
                      SOME v => v
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    62
                    | NONE   => insert t)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    63
    (*abstraction of a numeric literal*)
25929
6bfef23e26be avoiding direct references to numeral presentation
haftmann
parents: 25919
diff changeset
    64
    fun lit t = if can HOLogic.dest_number t then t else replace t;
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    65
    (*abstraction of a real/rational expression*)
34974
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    66
    fun rat ((c as Const(@{const_name Algebras.plus}, _)) $ x $ y) = c $ (rat x) $ (rat y)
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    67
      | rat ((c as Const(@{const_name Algebras.minus}, _)) $ x $ y) = c $ (rat x) $ (rat y)
35084
e25eedfc15ce moved constants inverse and divide to Ring.thy
haftmann
parents: 34974
diff changeset
    68
      | rat ((c as Const(@{const_name Rings.divide}, _)) $ x $ y) = c $ (rat x) $ (rat y)
34974
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    69
      | rat ((c as Const(@{const_name Algebras.times}, _)) $ x $ y) = c $ (rat x) $ (rat y)
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    70
      | rat ((c as Const(@{const_name Algebras.uminus}, _)) $ x) = c $ (rat x)
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    71
      | rat t = lit t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    72
    (*abstraction of an integer expression: no div, mod*)
34974
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    73
    fun int ((c as Const(@{const_name Algebras.plus}, _)) $ x $ y) = c $ (int x) $ (int y)
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    74
      | int ((c as Const(@{const_name Algebras.minus}, _)) $ x $ y) = c $ (int x) $ (int y)
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    75
      | int ((c as Const(@{const_name Algebras.times}, _)) $ x $ y) = c $ (int x) $ (int y)
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    76
      | int ((c as Const(@{const_name Algebras.uminus}, _)) $ x) = c $ (int x)
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    77
      | int t = lit t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    78
    (*abstraction of a natural number expression: no minus*)
34974
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    79
    fun nat ((c as Const(@{const_name Algebras.plus}, _)) $ x $ y) = c $ (nat x) $ (nat y)
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    80
      | nat ((c as Const(@{const_name Algebras.times}, _)) $ x $ y) = c $ (nat x) $ (nat y)
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    81
      | nat ((c as Const(@{const_name Suc}, _)) $ x) = c $ (nat x)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    82
      | nat t = lit t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    83
    (*abstraction of a relation: =, <, <=*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    84
    fun rel (T, c $ x $ y) =
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    85
            if T = HOLogic.realT then c $ (rat x) $ (rat y)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    86
            else if T = HOLogic.intT then c $ (int x) $ (int y)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    87
            else if T = HOLogic.natT then c $ (nat x) $ (nat y)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    88
            else if T = HOLogic.boolT then c $ (fm x) $ (fm y)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    89
            else replace (c $ x $ y)   (*non-numeric comparison*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    90
    (*abstraction of a formula*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    91
    and fm ((c as Const("op &", _)) $ p $ q) = c $ (fm p) $ (fm q)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    92
      | fm ((c as Const("op |", _)) $ p $ q) = c $ (fm p) $ (fm q)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    93
      | fm ((c as Const("op -->", _)) $ p $ q) = c $ (fm p) $ (fm q)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    94
      | fm ((c as Const("Not", _)) $ p) = c $ (fm p)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    95
      | fm ((c as Const("True", _))) = c
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    96
      | fm ((c as Const("False", _))) = c
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
    97
      | fm (t as Const("op =",  Type ("fun", [T,_])) $ _ $ _) = rel (T, t)
34974
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    98
      | fm (t as Const(@{const_name Algebras.less},  Type ("fun", [T,_])) $ _ $ _) = rel (T, t)
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 32740
diff changeset
    99
      | fm (t as Const(@{const_name Algebras.less_eq}, Type ("fun", [T,_])) $ _ $ _) = rel (T, t)
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   100
      | fm t = replace t
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   101
    (*entry point, and abstraction of a meta-formula*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   102
    fun mt ((c as Const("Trueprop", _)) $ p) = c $ (fm p)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   103
      | mt ((c as Const("==>", _)) $ p $ q)  = c $ (mt p) $ (mt q)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   104
      | mt t = fm t  (*it might be a formula*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   105
  in (list_all (params, mt body), !pairs) end;
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   106
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   107
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   108
(*Present the entire subgoal to the oracle, assumptions and all, but possibly
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   109
  abstracted.  Use via compose_tac, which performs no lifting but will
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   110
  instantiate variables.*)
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   111
28290
4cc2b6046258 simplified oracle interface;
wenzelm
parents: 28263
diff changeset
   112
val svc_tac = CSUBGOAL (fn (ct, i) =>
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   113
  let
28290
4cc2b6046258 simplified oracle interface;
wenzelm
parents: 28263
diff changeset
   114
    val thy = Thm.theory_of_cterm ct;
4cc2b6046258 simplified oracle interface;
wenzelm
parents: 28263
diff changeset
   115
    val (abs_goal, _) = svc_abstract (Thm.term_of ct);
4cc2b6046258 simplified oracle interface;
wenzelm
parents: 28263
diff changeset
   116
    val th = svc_oracle (Thm.cterm_of thy abs_goal);
4cc2b6046258 simplified oracle interface;
wenzelm
parents: 28263
diff changeset
   117
   in compose_tac (false, th, 0) i end
4cc2b6046258 simplified oracle interface;
wenzelm
parents: 28263
diff changeset
   118
   handle TERM _ => no_tac);
24470
41c81e23c08d removed Hoare/hoare.ML, Hoare/hoareAbort.ML, ex/svc_oracle.ML (which can be mistaken as attached ML script on case-insensitive file-system);
wenzelm
parents: 20813
diff changeset
   119
*}
20813
379ce56e5dc2 proper use of svc_oracle.ML;
wenzelm
parents: 17388
diff changeset
   120
12869
f362c0323d92 moved SVC stuff to ex;
wenzelm
parents:
diff changeset
   121
end