This function allows to use user-provided rewrite theories in an efficient way. This theories are written in the PatchProver and/or in the associated Pmm file, they contain only rewrite rules and can be used with the following guard of the Logic Solver language:
where T is the proof tactic, B a formula we want to simplify and R a wildcard (syntaxically: a single letter) that receives the result of the tactic T rule application to formula B.
The order of rule applications is given by the proof tactics.
Syntax is as follows:
Tactic ::= T | T.n | T ; Tactic | T.n ; Tactic
where T is a rewrite theory name and n a positive integer (therefore T.n is a name of a rule from theory T). If the tactic is just a theory name, all the rewrite rules within it will be tried. If the tactic is a rule name, only the rewrite rule of the same name will be used. Finally, if the tactic is of form U ; V where U and V are tactics, Tactic U will be executed at first and then V.
EXAMPLE
Let us consider, for instance, the following rewrite rules that are contained in the PatchProver file:
THEORY Maplet IS x: f[{a}] == {x |-> a} <: f END & THEORY Enum_Simp IS binhyp(A : INTEGER) & binhyp(B : INTEGER) => (x: {A} \/ {B} == (x = A) or (x = B)) END
|
These rules can be used in other user-provided rules in an efficient way with the predefined theory UserSimpX:
THEORY Assumed_Proof IS bguard(UserSimpX: UserSimpG(Maplet|x:f[{a}]),R) & bsubfrm({x|->a},btrue,R,r) & bnum(a) & binhyp(not(Eval({x|->a}) = {y,z})) => not(x:{y,z} & x:f[{a}]) END
|