src/Tools/Metis/src/Clause.sml
changeset 72004 913162a47d9f
parent 42102 fcfd07f122d4
equal deleted inserted replaced
72003:a7e6ac2dfa58 72004:913162a47d9f
     1 (* ========================================================================= *)
     1 (* ========================================================================= *)
     2 (* CLAUSE = ID + THEOREM                                                     *)
     2 (* CLAUSE = ID + THEOREM                                                     *)
     3 (* Copyright (c) 2002 Joe Hurd, distributed under the BSD License            *)
     3 (* Copyright (c) 2002 Joe Leslie-Hurd, distributed under the BSD License     *)
     4 (* ========================================================================= *)
     4 (* ========================================================================= *)
     5 
     5 
     6 structure Clause :> Clause =
     6 structure Clause :> Clause =
     7 struct
     7 struct
     8 
     8 
   216     | SOME thm => SOME (Clause {parameters = parameters, id = id, thm = thm});
   216     | SOME thm => SOME (Clause {parameters = parameters, id = id, thm = thm});
   217 
   217 
   218 fun reduce units (Clause {parameters,id,thm}) =
   218 fun reduce units (Clause {parameters,id,thm}) =
   219     Clause {parameters = parameters, id = id, thm = Units.reduce units thm};
   219     Clause {parameters = parameters, id = id, thm = Units.reduce units thm};
   220 
   220 
   221 fun rewrite rewr (cl as Clause {parameters,id,thm}) =
   221 local
   222     let
   222   fun simp rewr (parm : parameters) id th =
   223       fun simp th =
   223       let
   224           let
   224         val {ordering,...} = parm
   225             val {ordering,...} = parameters
   225         val cmp = KnuthBendixOrder.compare ordering
   226             val cmp = KnuthBendixOrder.compare ordering
   226       in
   227           in
   227         Rewrite.rewriteIdRule rewr cmp id th
   228             Rewrite.rewriteIdRule rewr cmp id th
   228       end;
   229           end
   229 in
       
   230   fun rewrite rewr cl =
       
   231       let
       
   232         val Clause {parameters = parm, id, thm = th} = cl
   230 
   233 
   231 (*MetisTrace4
   234 (*MetisTrace4
   232       val () = Print.trace Rewrite.pp "Clause.rewrite: rewr" rewr
   235         val () = Print.trace Rewrite.pp "Clause.rewrite: rewr" rewr
   233       val () = Print.trace Print.ppInt "Clause.rewrite: id" id
   236         val () = Print.trace Print.ppInt "Clause.rewrite: id" id
   234       val () = Print.trace pp "Clause.rewrite: cl" cl
   237         val () = Print.trace pp "Clause.rewrite: cl" cl
   235 *)
   238 *)
   236 
   239 
   237       val thm =
   240         val th =
   238           case Rewrite.peek rewr id of
   241             case Rewrite.peek rewr id of
   239             NONE => simp thm
   242               NONE => simp rewr parm id th
   240           | SOME ((_,thm),_) => if Rewrite.isReduced rewr then thm else simp thm
   243             | SOME ((_,th),_) =>
   241 
   244               if Rewrite.isReduced rewr then th else simp rewr parm id th
   242       val result = Clause {parameters = parameters, id = id, thm = thm}
   245 
       
   246         val result = Clause {parameters = parm, id = id, thm = th}
   243 
   247 
   244 (*MetisTrace4
   248 (*MetisTrace4
   245       val () = Print.trace pp "Clause.rewrite: result" result
   249         val () = Print.trace pp "Clause.rewrite: result" result
   246 *)
   250 *)
   247     in
   251       in
   248       result
   252         result
   249     end
   253       end
   250 (*MetisDebug
   254 (*MetisDebug
   251     handle Error err => raise Error ("Clause.rewrite:\n" ^ err);
   255       handle Error err => raise Error ("Clause.rewrite:\n" ^ err);
   252 *)
   256 *)
       
   257 end;
   253 
   258 
   254 (* ------------------------------------------------------------------------- *)
   259 (* ------------------------------------------------------------------------- *)
   255 (* Inference rules: these generate new clause ids.                           *)
   260 (* Inference rules: these generate new clause ids.                           *)
   256 (* ------------------------------------------------------------------------- *)
   261 (* ------------------------------------------------------------------------- *)
   257 
   262