diff options
Diffstat (limited to 'sucl/rewr.dcl')
-rw-r--r-- | sucl/rewr.dcl | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/sucl/rewr.dcl b/sucl/rewr.dcl new file mode 100644 index 0000000..2b4448f --- /dev/null +++ b/sucl/rewr.dcl @@ -0,0 +1,51 @@ +definition module rewr + +from rule import Rule +from graph import Graph +from pfun import Pfun +from StdOverloaded import == + +// Unfold a rewrite rule +xunfold + :: var + (Rule sym pvar) + !( [var] + , var + , Graph sym var + , Pfun pvar var + ) + -> ( [var] + , var + , Graph sym var + , Pfun pvar var + ) | == var & == pvar + +foldfn + :: (Pfun pvar var) // Matching of replacement + sym // Symbol at root of pattern + [pvar] // Arguments of pattern + pvar // Root of replacement + (Graph sym var) // Subject graph + -> Graph sym var // Folded subject + | == pvar + +getmapping + :: tsym + (Graph sym pvar) + (Graph sym var) + !(pvar,var) + ((Pfun pvar var) -> tsym) + !(Pfun pvar var) + -> tsym + | == sym + & == var + & == pvar + +instantiate + :: .(Graph sym pvar) // Pattern to instantiate with + pvar // Root of the pattern + var // Open node to instantiate + (.[var],.Graph sym var) // Heap,graph + -> .([var],Graph sym var) // New heap,graph + | == var + & == pvar |