equal
deleted
inserted
replaced
12740 val resolve = fn lit => fn pos => fn neg => |
12740 val resolve = fn lit => fn pos => fn neg => |
12741 resolve lit pos neg |
12741 resolve lit pos neg |
12742 handle Error err => |
12742 handle Error err => |
12743 raise Error ("Metis_Thm.resolve:\nlit = " ^ Metis_Literal.toString lit ^ |
12743 raise Error ("Metis_Thm.resolve:\nlit = " ^ Metis_Literal.toString lit ^ |
12744 "\npos = " ^ toString pos ^ |
12744 "\npos = " ^ toString pos ^ |
12745 "\nneg = " ^ toString neg ^ "\n" ^ err); |
12745 "\nneg = " ^ toString neg ^ "\n" ^ err) |
|
12746 | Bug bug => |
|
12747 raise Bug ("Metis_Thm.resolve:\nlit = " ^ Metis_Literal.toString lit ^ |
|
12748 "\npos = " ^ toString pos ^ |
|
12749 "\nneg = " ^ toString neg ^ "\n" ^ bug); |
12746 *) |
12750 *) |
12747 |
12751 |
12748 (* ------------------------------------------------------------------------- *) |
12752 (* ------------------------------------------------------------------------- *) |
12749 (* *) |
12753 (* *) |
12750 (* --------- refl t *) |
12754 (* --------- refl t *) |
19450 val (lit',litTh) = mk_literule neq lit |
19454 val (lit',litTh) = mk_literule neq lit |
19451 val lneq = neqConvsAdd order lneq lit' |
19455 val lneq = neqConvsAdd order lneq lit' |
19452 val lits = Metis_LiteralSet.add lits lit' |
19456 val lits = Metis_LiteralSet.add lits lit' |
19453 in |
19457 in |
19454 if Metis_Literal.equal lit lit' then (changed,lneq,lits,th) |
19458 if Metis_Literal.equal lit lit' then (changed,lneq,lits,th) |
19455 else (true, lneq, lits, Metis_Thm.resolve lit th litTh) |
19459 else (true, lneq, lits, |
|
19460 if Metis_Thm.member lit th then Metis_Thm.resolve lit th litTh else th) |
19456 end |
19461 end |
19457 |
19462 |
19458 fun rewr_neq_lits lits th = |
19463 fun rewr_neq_lits lits th = |
19459 let |
19464 let |
19460 val neqs = buildNeqConvs order lits |
19465 val neqs = buildNeqConvs order lits |
19497 val () = if not (thmReducible order known id result) then () |
19502 val () = if not (thmReducible order known id result) then () |
19498 else raise Bug "Metis_Rewrite.rewriteIdRule': should be normalized" |
19503 else raise Bug "Metis_Rewrite.rewriteIdRule': should be normalized" |
19499 in |
19504 in |
19500 result |
19505 result |
19501 end |
19506 end |
19502 handle Error err => raise Error ("Metis_Rewrite.rewriteIdRule':\n" ^ err); |
19507 handle Error err => |
|
19508 raise Error ("Metis_Rewrite.rewriteIdRule':\n" ^ |
|
19509 "th = " ^ Metis_Thm.toString th ^ "\n" ^ err) |
|
19510 | Bug bug => |
|
19511 raise Bug ("Metis_Rewrite.rewriteIdRule':\n" ^ |
|
19512 "th = " ^ Metis_Thm.toString th ^ "\n" ^ bug); |
19503 *) |
19513 *) |
19504 |
19514 |
19505 fun rewrIdConv (Metis_Rewrite {known,redexes,...}) order = |
19515 fun rewrIdConv (Metis_Rewrite {known,redexes,...}) order = |
19506 rewrIdConv' order known redexes; |
19516 rewrIdConv' order known redexes; |
19507 |
19517 |
20878 |
20888 |
20879 fun rewrite cl = |
20889 fun rewrite cl = |
20880 let |
20890 let |
20881 val cl' = Metis_Clause.rewrite rewr cl |
20891 val cl' = Metis_Clause.rewrite rewr cl |
20882 in |
20892 in |
20883 if Metis_Clause.equalThms cl cl' then SOME cl else Metis_Clause.simplify cl' |
20893 if Metis_Clause.equalThms cl cl' then SOME cl |
|
20894 else |
|
20895 case Metis_Clause.simplify cl' of |
|
20896 NONE => NONE |
|
20897 | SOME cl'' => |
|
20898 (* *) |
|
20899 (* Post-rewrite simplification can enable more rewrites: *) |
|
20900 (* *) |
|
20901 (* ~(X = f(X)) \/ ~(g(Y) = f(X)) \/ ~(c = f(X)) *) |
|
20902 (* ---------------------------------------------- rewrite *) |
|
20903 (* ~(X = f(X)) \/ ~(g(Y) = X) \/ ~(c = X) *) |
|
20904 (* ---------------------------------------------- simplify *) |
|
20905 (* ~(g(Y) = f(g(Y))) \/ ~(c = g(Y)) *) |
|
20906 (* ---------------------------------------------- rewrite *) |
|
20907 (* ~(c = f(c)) \/ ~(c = g(Y)) *) |
|
20908 (* *) |
|
20909 (* This was first observed in a bug discovered by Martin *) |
|
20910 (* Desharnais and Jasmin Blanchett *) |
|
20911 (* *) |
|
20912 if Metis_Clause.equalThms cl' cl'' then SOME cl' else rewrite cl'' |
20884 end |
20913 end |
20885 in |
20914 in |
20886 fn cl => |
20915 fn cl => |
20887 case Metis_Clause.simplify cl of |
20916 case Metis_Clause.simplify cl of |
20888 NONE => NONE |
20917 NONE => NONE |