src/Tools/Metis/src/Thm.sml
author wenzelm
Wed, 03 Nov 2010 21:53:56 +0100
changeset 40335 3e4bb6e7c3ca
parent 39502 cffceed8e7fa
child 42102 fcfd07f122d4
permissions -rw-r--r--
feeder: treat header as escaped utf8 to allow initial ML text to refer to non-ASCII file/directory names (e.g. "Documents/" on Chinese Ubuntu);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     1
(* ========================================================================= *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     2
(* A LOGICAL KERNEL FOR FIRST ORDER CLAUSAL THEOREMS                         *)
39502
cffceed8e7fa fix license
blanchet
parents: 39501
diff changeset
     3
(* Copyright (c) 2001 Joe Hurd, distributed under the BSD License            *)
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     4
(* ========================================================================= *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     5
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     6
structure Thm :> Thm =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     7
struct
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     8
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     9
open Useful;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    10
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    11
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    12
(* An abstract type of first order logic theorems.                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    13
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    14
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    15
type clause = LiteralSet.set;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    16
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    17
datatype inferenceType =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    18
    Axiom
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    19
  | Assume
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    20
  | Subst
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    21
  | Factor
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    22
  | Resolve
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    23
  | Refl
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    24
  | Equality;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    25
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    26
datatype thm = Thm of clause * (inferenceType * thm list);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    27
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    28
type inference = inferenceType * thm list;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    29
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    30
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    31
(* Theorem destructors.                                                      *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    32
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    33
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    34
fun clause (Thm (cl,_)) = cl;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    35
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    36
fun inference (Thm (_,inf)) = inf;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    37
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    38
(* Tautologies *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    39
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    40
local
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    41
  fun chk (_,NONE) = NONE
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    42
    | chk ((pol,atm), SOME set) =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    43
      if (pol andalso Atom.isRefl atm) orelse AtomSet.member atm set then NONE
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    44
      else SOME (AtomSet.add set atm);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    45
in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    46
  fun isTautology th =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    47
      case LiteralSet.foldl chk (SOME AtomSet.empty) (clause th) of
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    48
        SOME _ => false
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    49
      | NONE => true;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    50
end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    51
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    52
(* Contradictions *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    53
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    54
fun isContradiction th = LiteralSet.null (clause th);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    55
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    56
(* Unit theorems *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    57
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    58
fun destUnit (Thm (cl,_)) =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    59
    if LiteralSet.size cl = 1 then LiteralSet.pick cl
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    60
    else raise Error "Thm.destUnit";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    61
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    62
val isUnit = can destUnit;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    63
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    64
(* Unit equality theorems *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    65
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    66
fun destUnitEq th = Literal.destEq (destUnit th);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    67
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    68
val isUnitEq = can destUnitEq;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    69
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    70
(* Literals *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    71
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    72
fun member lit (Thm (cl,_)) = LiteralSet.member lit cl;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    73
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    74
fun negateMember lit (Thm (cl,_)) = LiteralSet.negateMember lit cl;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    75
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    76
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    77
(* A total order.                                                            *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    78
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    79
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    80
fun compare (th1,th2) = LiteralSet.compare (clause th1, clause th2);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    81
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    82
fun equal th1 th2 = LiteralSet.equal (clause th1) (clause th2);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    83
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    84
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    85
(* Free variables.                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    86
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    87
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    88
fun freeIn v (Thm (cl,_)) = LiteralSet.freeIn v cl;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    89
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    90
fun freeVars (Thm (cl,_)) = LiteralSet.freeVars cl;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    91
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    92
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    93
(* Pretty-printing.                                                          *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    94
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    95
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    96
fun inferenceTypeToString Axiom = "Axiom"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    97
  | inferenceTypeToString Assume = "Assume"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    98
  | inferenceTypeToString Subst = "Subst"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    99
  | inferenceTypeToString Factor = "Factor"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   100
  | inferenceTypeToString Resolve = "Resolve"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   101
  | inferenceTypeToString Refl = "Refl"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   102
  | inferenceTypeToString Equality = "Equality";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   103
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   104
fun ppInferenceType inf =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   105
    Print.ppString (inferenceTypeToString inf);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   106
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   107
local
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   108
  fun toFormula th =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   109
      Formula.listMkDisj
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   110
        (map Literal.toFormula (LiteralSet.toList (clause th)));
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   111
in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   112
  fun pp th =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   113
      Print.blockProgram Print.Inconsistent 3
39443
e330437cd22a copied the unmodified official Metis 2.3 (15 Sept. 2010) sources into Isabelle
blanchet
parents: 39353
diff changeset
   114
        [Print.ppString "|- ",
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   115
         Formula.pp (toFormula th)];
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   116
end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   117
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   118
val toString = Print.toString pp;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   119
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   120
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   121
(* Primitive rules of inference.                                             *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   122
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   123
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   124
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   125
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   126
(* ----- axiom C                                                             *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   127
(*   C                                                                       *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   128
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   129
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   130
fun axiom cl = Thm (cl,(Axiom,[]));
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   131
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   132
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   133
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   134
(* ----------- assume L                                                      *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   135
(*   L \/ ~L                                                                 *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   136
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   137
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   138
fun assume lit =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   139
    Thm (LiteralSet.fromList [lit, Literal.negate lit], (Assume,[]));
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   140
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   141
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   142
(*    C                                                                      *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   143
(* -------- subst s                                                          *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   144
(*   C[s]                                                                    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   145
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   146
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   147
fun subst sub (th as Thm (cl,inf)) =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   148
    let
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   149
      val cl' = LiteralSet.subst sub cl
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   150
    in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   151
      if Portable.pointerEqual (cl,cl') then th
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   152
      else
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   153
        case inf of
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   154
          (Subst,_) => Thm (cl',inf)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   155
        | _ => Thm (cl',(Subst,[th]))
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   156
    end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   157
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   158
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   159
(*   L \/ C    ~L \/ D                                                       *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   160
(* --------------------- resolve L                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   161
(*        C \/ D                                                             *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   162
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   163
(* The literal L must occur in the first theorem, and the literal ~L must    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   164
(* occur in the second theorem.                                              *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   165
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   166
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   167
fun resolve lit (th1 as Thm (cl1,_)) (th2 as Thm (cl2,_)) =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   168
    let
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   169
      val cl1' = LiteralSet.delete cl1 lit
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   170
      and cl2' = LiteralSet.delete cl2 (Literal.negate lit)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   171
    in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   172
      Thm (LiteralSet.union cl1' cl2', (Resolve,[th1,th2]))
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   173
    end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   174
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   175
(*MetisDebug
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   176
val resolve = fn lit => fn pos => fn neg =>
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   177
    resolve lit pos neg
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   178
    handle Error err =>
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   179
      raise Error ("Thm.resolve:\nlit = " ^ Literal.toString lit ^
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   180
                   "\npos = " ^ toString pos ^
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   181
                   "\nneg = " ^ toString neg ^ "\n" ^ err);
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   182
*)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   183
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   184
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   185
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   186
(* --------- refl t                                                          *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   187
(*   t = t                                                                   *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   188
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   189
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   190
fun refl tm = Thm (LiteralSet.singleton (true, Atom.mkRefl tm), (Refl,[]));
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   191
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   192
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   193
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   194
(* ------------------------ equality L p t                                   *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   195
(*   ~(s = t) \/ ~L \/ L'                                                    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   196
(*                                                                           *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   197
(* where s is the subterm of L at path p, and L' is L with the subterm at    *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   198
(* path p being replaced by t.                                               *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   199
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   200
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   201
fun equality lit path t =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   202
    let
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   203
      val s = Literal.subterm lit path
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   204
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   205
      val lit' = Literal.replace lit (path,t)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   206
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   207
      val eqLit = Literal.mkNeq (s,t)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   208
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   209
      val cl = LiteralSet.fromList [eqLit, Literal.negate lit, lit']
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   210
    in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   211
      Thm (cl,(Equality,[]))
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   212
    end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   213
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   214
end