src/HOL/Tools/ATP/recon_prelim.ML
author quigley
Thu, 07 Apr 2005 18:33:56 +0200
changeset 15680 83164f078985
parent 15642 028059faa963
child 15684 5ec4d21889d6
permissions -rw-r--r--
Got rid of Main.thy reference
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     2
open Goals;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     3
open Unify;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     4
open USyntax;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     5
open Utils;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     6
open Envir;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     7
open Tfl;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     8
open Rules;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     9
15680
83164f078985 Got rid of Main.thy reference
quigley
parents: 15642
diff changeset
    10
Goal "A -->A";
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    11
by Auto_tac;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    12
qed "foo";
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    13
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    14
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    15
val Mainsign = #sign (rep_thm foo);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    16
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    17
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    18
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    19
(*val myhol = sign_of thy;*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    20
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    21
val myenv = empty 0;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    22
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    23
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    24
val gcounter = ref 0; 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    25
      
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    26
exception NOMATES;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    27
exception UNMATEABLE;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    28
exception NOTSOME;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    29
exception UNSPANNED;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    30
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    31
fun USYN_ERR func mesg = Utils.ERR {module = "USyntax", func = func, mesg = mesg};
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    32
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    33
fun dest_neg(Const("Not",_) $ M) = M
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    34
  | dest_neg _ = raise USYN_ERR "dest_neg" "not a negation";
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    35
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    36
fun is_abs t = can dest_abs t;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    37
fun is_comb t = can dest_comb t;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    38
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    39
fun iscomb a = if is_Free a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    40
			false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    41
	      else if is_Var a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    42
			false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    43
		else if is_conj a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    44
			false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    45
		else if is_disj a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    46
			false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    47
		else if is_forall a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    48
			false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    49
		else if is_exists a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    50
			false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    51
		else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    52
			true;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    53
fun getstring (Var (v,T)) = fst v
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    54
   |getstring (Free (v,T))= v;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    55
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    56
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    57
fun getindexstring ((a:string),(b:int))= a;  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    58
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    59
fun getstrings (a,b) = let val astring = getstring a
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    60
                           val bstring = getstring b in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    61
                           (astring,bstring)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    62
                       end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    63
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    64
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    65
fun alltrue [] = true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    66
   |alltrue (true::xs) = true andalso (alltrue xs)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    67
   |alltrue (false::xs) = false;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    68
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    69
fun allfalse [] = true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    70
   |allfalse (false::xs) = true andalso (allfalse xs)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    71
   |allfalse (true::xs) = false;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    72
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    73
fun not_empty [] = false 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    74
    | not_empty _ = true;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    75
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    76
fun twoisvar (a,b) = is_Var b;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    77
fun twoisfree (a,b) = is_Free b;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    78
fun twoiscomb (a,b) = iscomb b;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    79
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    80
fun strequalfirst a (b,c) = (getstring a) = (getstring b);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    81
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    82
fun fstequal a b = a = fst b;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    83
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    84
fun takeout (i,[])  = []
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    85
   | takeout (i,(x::xs)) = if (i>0) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    86
                               (x::(takeout(i-1,xs)))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    87
                           else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    88
                               [];
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    89
		
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    90
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    91
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    92
(* Presumably here, we would allow is_Var f for doing HOL, i.e. can subst for propositions *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    93
fun is_Abs (Abs _) = true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    94
  | is_Abs _ = false;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    95
fun is_Bound (Bound _) = true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    96
  | is_Bound _ = false;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    97
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    98
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    99
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   100
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   101
fun is_hol_tm t =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   102
                if (is_Free t) then 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   103
                        true 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   104
                else if (is_Var t) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   105
                        true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   106
                else if (is_Const t) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   107
                        true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   108
                else if (is_Abs t) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   109
                        true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   110
                else if (is_Bound t) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   111
                        true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   112
                else 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   113
                        let val (f, args) = strip_comb t in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   114
                            if ((is_Free f) orelse (is_Var f)) andalso (alltrue (map is_hol_tm args)) then 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   115
                                true            (* should be is_const *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   116
                            else 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   117
                                false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   118
                       end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   119
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   120
fun is_hol_fm f =  if is_neg f then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   121
                        let val newf = dest_neg f in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   122
                            is_hol_fm newf
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   123
                        end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   124
                    
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   125
               else if is_disj f then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   126
                        let val {disj1,disj2} = dest_disj f in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   127
                            (is_hol_fm disj1) andalso (is_hol_fm disj2)  (* shouldn't this be and ? *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   128
                        end 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   129
               else if is_conj f then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   130
                        let val {conj1,conj2} = dest_conj f in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   131
                            (is_hol_fm conj1) andalso (is_hol_fm conj2)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   132
                        end 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   133
               else if (is_forall f) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   134
                        let val {Body, Bvar} = dest_forall f in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   135
                            is_hol_fm Body
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   136
                        end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   137
               else if (is_exists f) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   138
                        let val {Body, Bvar} = dest_exists f in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   139
                            is_hol_fm Body
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   140
                        end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   141
               else if (iscomb f) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   142
                        let val (P, args) = strip_comb f in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   143
                            ((is_hol_tm P)) andalso (alltrue (map is_hol_fm args))
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   144
                        end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   145
                else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   146
                        is_hol_tm f;                              (* should be is_const, nee
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   147
d to check args *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   148
               
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   149
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   150
fun hol_literal t =  (is_hol_fm t) andalso ( not ((is_conj t) orelse (is_disj t) orelse (is_forall t) orelse (is_exists t)));
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   151
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   152
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   153
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   154
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   155
(*PROBLEM HERE WITH THINGS THAT HAVE TWO RANDS e.g. P x y *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   156
fun getcombvar a = let val {Rand = rand, Rator = rator} = dest_comb a in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   157
			if (iscomb rand) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   158
				getcombvar rand
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   159
			else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   160
				rand
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   161
		   end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   162
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   163
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   164
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   165
fun free2var v = let val thing = dest_Free v 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   166
                     val (name,vtype) = thing
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   167
                     val index = (name,0) in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   168
                     Var (index,vtype)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   169
                 end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   170
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   171
fun var2free v = let val (index, tv) = dest_Var v 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   172
                     val istr = fst index in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   173
                     Free (istr,tv)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   174
                 end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   175
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   176
fun  inlist v [] = false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   177
    | inlist v (first::rest) = if first = v then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   178
				true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   179
			     else inlist v rest;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   180
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   181
(*fun in_vars v [] = false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   182
    | in_vars v ((a,b)::rest) = if v = a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   183
				  true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   184
			       else if v = b then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   185
				  true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   186
			       else in_vars v rest;*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   187
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   188
fun in_vars v [] = false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   189
    | in_vars v (a::rest) = if (fst v) = a then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   190
				  true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   191
			      
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   192
			       else in_vars v rest;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   193
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   194
fun equalpair (a,b) (c,d) = if (a,b)= (c,d) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   195
					true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   196
			    else if (a,b) = (d,c) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   197
					true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   198
			    else false;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   199
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   200
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   201
fun is_empty_seq thisseq =  case Seq.chop (1, thisseq) of
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   202
                             ([],_)   => true
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   203
                           |      _   => false
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   204
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   205
fun getnewenv thisseq = 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   206
			   let val seqlist = Seq.list_of thisseq
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   207
			   val envpair =hd seqlist in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   208
			   fst envpair 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   209
			end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   210
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   211
fun getnewsubsts thisseq =  let val seqlist = Seq.list_of thisseq
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   212
			   val envpair =hd seqlist in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   213
			   snd envpair 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   214
			end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   215
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   216
fun readnewenv thisenv =let val seqlist = Seq.list_of thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   217
			   val envpair = hd seqlist
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   218
			   val env = fst envpair
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   219
			   val envlist = alist_of env in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   220
			hd envlist
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   221
			end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   222
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   223
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   224
fun readenv thisenv = let val envlist = alist_of thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   225
			
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   226
				hd envlist
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   227
			end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   228
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   229
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   230
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   231
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   232
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   233
fun prover s = prove_goal HOL.thy s (fn _ => [blast_tac HOL_cs 1]);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   234
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   235
fun oneofthree (a,b,c) = a;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   236
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   237
fun twoofthree (a,b,c) = b;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   238
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   239
fun threeofthree (a,b,c) = c;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   240
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   241
val my_simps = map prover
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   242
 [ "(x=x) = True",
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   243
    "(~ ~ P) = P",
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   244
   "(~P) ~= P", "P ~= (~P)", "(P ~= Q) = (P = (~Q))",
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   245
   
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   246
   "(P | P) = P", "(P | (P | Q)) = (P | Q)",
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   247
   "((~P) = (~Q)) = (P=Q)" ];
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   248
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   249
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   250
(*val myss = HOL_basic_ss addsimps (my_simps@[not_all, not_ex, de_Morgan_conj, de_Morgan_disj, U_def, intersect_def, setEq_def, proposEq_def, hashset_def, subset_def]@ex_simps @ all_simps);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   251
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   252
*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   253
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   254
(*--------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   255
(* NNF stuff from meson_tac *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   256
(*--------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   257
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   258
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   259
(*Prove theorems using fast_tac*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   260
fun prove_fun s = 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   261
    prove_goal HOL.thy s
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   262
         (fn prems => [ cut_facts_tac prems 1, Fast_tac 1 ]);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   263
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   264
(*------------------------------------------------------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   265
(* Renaming all the bound vars in the term - sort of fake `Skolemisation' *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   266
(*------------------------------------------------------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   267
fun mygenvar ty thisenv =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   268
  let val count = !gcounter
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   269
      val genstring = "GEN"^(string_of_int count)^"VAR" in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   270
	    	gcounter := count + 1;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   271
              	genvar genstring (thisenv,ty)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   272
  end;  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   273
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   274
fun renameBounds t thisenv = if (is_Var t) orelse (is_Free t) orelse (iscomb t) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   275
			t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   276
	 	
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   277
		else if is_forall t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   278
			let val {Body, Bvar} = dest_forall t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   279
                            val newvarenv = mygenvar(type_of Bvar) thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   280
                            val newvar = snd(newvarenv)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   281
                            val newbod = subst_free [(Bvar,newvar)] Body
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   282
                            val newbod2 = renameBounds newbod thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   283
                            mk_forall{Body = newbod2, Bvar = newvar}
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   284
                        end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   285
		else if is_exists t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   286
                        let val {Body, Bvar} =dest_exists t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   287
			    val newvarenv = mygenvar(type_of Bvar) thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   288
                            val newvar = snd(newvarenv)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   289
                            val newbod = subst_free [(Bvar,newvar)] Body
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   290
                            val newbod2 = renameBounds newbod thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   291
                            mk_exists{Body = newbod2, Bvar = newvar}    
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   292
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   293
		else if is_conj t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   294
			let val {conj1,conj2} = dest_conj t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   295
			    val vpl = renameBounds conj1 thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   296
			    val vpr = renameBounds conj2 thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   297
		            mk_conj {conj1 = vpl, conj2 = vpr}
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   298
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   299
		else 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   300
			let val {disj1, disj2} = dest_disj t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   301
			    val vpl = renameBounds disj1 thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   302
			    val  vpr = renameBounds disj2  thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   303
			    mk_disj {disj1 = vpl,disj2= vpr}  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   304
			end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   305
                	
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   306
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   307
(*-----------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   308
(* from hologic.ml *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   309
(*-----------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   310
val boolT = Type ("bool", []);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   311
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   312
val Trueprop = Const ("Trueprop", boolT --> propT);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   313
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   314
fun mk_Trueprop P = Trueprop $ P;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   315
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   316
fun eq_const T = Const ("op =", [T, T] ---> boolT);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   317
fun mk_eq (t, u) = eq_const (fastype_of t) $ t $ u;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   318
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   319
fun dest_Trueprop (Const ("Trueprop", _) $ P) = P
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   320
 | dest_Trueprop t = raise TERM ("dest_Trueprop", [t]);
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   321
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   322
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   323
(*-----------------------------------------------------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   324
(* Making a THM from a subgoal and other such things                     *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   325
(*-----------------------------------------------------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   326
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   327
fun thmfromgoal goalnum = let val mygoal = getgoal goalnum
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   328
                              val  mycgoal = cterm_of Mainsign mygoal in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   329
                              assume mycgoal
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   330
                          end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   331
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   332
fun termfromgoal goalnum = let val mygoal = getgoal goalnum
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   333
                               val {Rand = myra, Rator = myrat} = dest_comb mygoal in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   334
                               myra
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   335
                           end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   336
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   337
fun thmfromterm t = let val propterm = mk_Trueprop t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   338
                        val mycterm = cterm_of Mainsign propterm in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   339
                        assume mycterm
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   340
                    end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   341
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   342
fun termfromthm t = let val conc = concl_of t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   343
                        val {Rand = myra, Rator = myrat} = dest_comb conc in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   344
                        myra
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   345
                    end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   346
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   347
fun goalfromterm t = let val pterm = mk_Trueprop t  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   348
                         val ct = cterm_of Mainsign  pterm in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   349
                         goalw_cterm [] ct
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   350
                     end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   351
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   352
fun termfromgoalimp goalnum = let val mygoal = getgoal goalnum
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   353
                               val {Rand = myra1, Rator = myrat1} = dest_comb mygoal 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   354
                               val  {Rand = myra, Rator = myrat} = dest_comb myra1 in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   355
                               myra
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   356
                           end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   357
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   358
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   359
fun mkvars (a,b:term) = let val thetype = type_of b 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   360
                           val stringa =( fst a)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   361
                            val newa = Free (stringa, thetype) in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   362
                            (newa,b)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   363
                        end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   364
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   365
fun glue [] thestring = thestring
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   366
  |glue (""::[]) thestring = thestring 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   367
  |glue (a::[]) thestring = thestring^" "^a 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   368
  |glue (a::rest) thestring = let val newstring = thestring^" "^a in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   369
                                 glue rest newstring
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   370
                             end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   371
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   372
exception STRINGEXCEP;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   373
 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   374
fun getvstring (Var (v,T)) = fst v
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   375
   |getvstring (Free (v,T))= v;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   376
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   377
  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   378
fun getindexstring ((a:string),(b:int))= a;  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   379
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   380
fun getstrings (a,b) = let val astring = getstring a
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   381
                           val bstring = getstring b in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   382
                           (astring,bstring)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   383
                       end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   384
(*
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   385
fun getvstrings (a,b) = let val astring = getvstring a
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   386
                           val bstring = getvstring b in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   387
                           (astring,bstring)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   388
                       end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   389
*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   390
 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   391
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   392
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   393
(*------------------------------------------------------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   394
(* Renaming all the bound vars in the term - sort of fake `Skolemisation' *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   395
(*------------------------------------------------------------------------*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   396
fun mygenvar ty thisenv =
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   397
  let val count = !gcounter
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   398
      val genstring = "GEN"^(string_of_int count)^"VAR" in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   399
	    	gcounter := count + 1;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   400
              	genvar genstring (thisenv,ty)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   401
  end;  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   402
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   403
fun renameBounds t thisenv = if (is_Var t) orelse (is_Free t) orelse (iscomb t) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   404
			t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   405
	 	
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   406
		else if is_forall t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   407
			let val {Body, Bvar} = dest_forall t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   408
                            val newvarenv = mygenvar(type_of Bvar) thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   409
                            val newvar = snd(newvarenv)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   410
                            val newbod = subst_free [(Bvar,newvar)] Body
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   411
                            val newbod2 = renameBounds newbod thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   412
                            mk_forall{Body = newbod2, Bvar = newvar}
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   413
                        end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   414
		else if is_exists t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   415
                        let val {Body, Bvar} =dest_exists t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   416
			    val newvarenv = mygenvar(type_of Bvar) thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   417
                            val newvar = snd(newvarenv)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   418
                            val newbod = subst_free [(Bvar,newvar)] Body
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   419
                            val newbod2 = renameBounds newbod thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   420
                            mk_exists{Body = newbod2, Bvar = newvar}    
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   421
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   422
		else if is_conj t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   423
			let val {conj1,conj2} = dest_conj t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   424
			    val vpl = renameBounds conj1 thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   425
			    val vpr = renameBounds conj2 thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   426
		            mk_conj {conj1 = vpl, conj2 = vpr}
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   427
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   428
		else 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   429
			let val {disj1, disj2} = dest_disj t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   430
			    val vpl = renameBounds disj1 thisenv
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   431
			    val  vpr = renameBounds disj2  thisenv in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   432
			    mk_disj {disj1 = vpl,disj2= vpr}  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   433
			end;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   434
                	
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   435
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   436
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   437
exception VARFORM_PROBLEM;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   438
		
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   439
fun varform t = if (hol_literal t) then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   440
			t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   441
	 	
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   442
		else if is_forall t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   443
			let val {Body, Bvar} = dest_forall t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   444
         (* need to subst schematic vars for Bvar here, e.g. x becomes ?x *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   445
                         val newB = free2var Bvar
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   446
                         val newBody = subst_free[(Bvar, newB)] Body in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   447
			    varform newBody
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   448
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   449
		else if is_exists t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   450
        (* Shouldn't really be any exists in term due to Skolemisation*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   451
			let val {Body, Bvar} =dest_exists t in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   452
			    varform Body
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   453
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   454
		else if is_conj t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   455
			let val {conj1,conj2} = dest_conj t
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   456
			    val vpl = varform conj1 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   457
			    val vpr = varform conj2 in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   458
		            mk_conj {conj1 = vpl, conj2 = vpr}
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   459
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   460
		else if is_disj t then
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   461
			let val {disj1, disj2} = dest_disj t 
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   462
			    val vpl = varform disj1
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   463
			    val  vpr = varform disj2 in
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   464
			    mk_disj {disj1 = vpl,disj2= vpr}  
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   465
			end
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   466
                else
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   467
                        raise VARFORM_PROBLEM;
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   468
                	
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   469
 
15680
83164f078985 Got rid of Main.thy reference
quigley
parents: 15642
diff changeset
   470
exception ASSERTION of string;